[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: bash: command_substitute: cannot duplicate pipe as fd 1: Bad file de
From: |
Stephane CHAZELAS |
Subject: |
Re: bash: command_substitute: cannot duplicate pipe as fd 1: Bad file descriptor |
Date: |
Sun, 15 Mar 2009 10:56:06 +0000 (UTC) |
User-agent: |
slrn/pre1.0.0-2 (Linux) |
2009-03-12, 06:47(-07), ipif:
[...]
> sh-3.2# bash
> bash: command_substitute: cannot duplicate pipe as fd 1: Bad file descriptor
>
> (currently I'm using bash as init)
[...]
> In my opinion this problem might not be bash related, but I have no idea
> what goes wrong. Unfortunately gdb seems to rely on some shell functions, so
> I can't use it.
>
> No idea if this is helpfull: here is the end of strace's output:
[...]
> stat64("//.dir_colors", 0xefc665c0) = -1 ENOENT (No such file or
> directory)
> stat64("/etc/DIR_COLORS", {st_mode=S_IFREG|0644, st_size=4038, ...}) = 0
> pipe([3, 4]) = 3
> fork(bash: command_substitute: cannot duplicate pipe as fd 1: Bad file
> descriptor
> ) = 660
[...]
Looks like it is evaluating some code that something like does:
if [ -e "$HOME/dircolors" ] || [ -e /etc/DIR_COLORS ]; then
eval "$(dircolors)"
fi
It fails in the subshell when redirecting dircolors's output to
the pipe which command substitution reads the other end of.
As you didn't do strace -f, we don't see what's happening in the
subshell, but it's likely to be the dup2(4, 1).
The return value of pipe() is quite surprising there. pipe(2) is
meant to return either 0 or -1, so it looks like a problem in
your Linux kernel (or strace), possibly some mess up with the
system call numbers?
--
Stéphane