On 11/8/13, 6:26 PM, John Dawson wrote:
> The following surprised me. I thought line 4 of the output, and certainly
> line 5 of the output, should have said "0 /dev/fd/63" too. Is this behavior
> a bug?

Bash is pretty aggressive about closing pipe file descriptors (/dev/fd
constructs use pipes) opened for read.  Open pipe file descriptors inhibit
SIGPIPE sending.  In this case, the pipe fd gets closed in the parent part
of the pipeline, and is therefore unavailable for the next command in the
shell function.  The pipeline error (line 4) is the issue discussed in

http://lists.gnu.org/archive/html/bug-bash/2012-11/msg00013.html

That was fixed a while back.  The fix for the shell function issue is to
defer closing the named pipes until the shell function returns.  I will
have to see whether or not that causes file descriptor exhaustion under
the right scenario.

> 
> $ cat bug1.bash
> #!/bin/bash
> count_lines()
> {
>     wc -l $1
>     wc -l $1
>     wc -l $1
>     true | wc -l $1
>     wc -l $1
> }
> count_lines <(date)

Chet

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU    c...@case.edu    http://cnswww.cns.cwru.edu/~chet/

Reply via email to