bug-bash
[Top][All Lists]
Advanced

[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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]