As of 4.3.30 (jessie), the critical passage in the documentation has
been slightly reworded:

"If |& is used, command's standard error, in addition to its
standard output, is connected to command2's standard input through
the pipe;"

But it's still not correct. The point is, "|&" does *not* connect
the command's standard error to the pipe. It connects it to its
standard output *after* all other redirections. *Before* those
redirections, that would be the pipe, but after them, it may or may
not be. I.e. what seems to happen is:

1. redirect stdout to the pipe
2. do all explicit redirections
3. redirect stderr to stdout

So stdout and stderr are handled fundamentally differently, whereas
the wording above makes it sound like they're handled the same way.

Consider again the example from my original report:

% sh -c 'echo stdout; echo stderr >&2' > /dev/null |& cat

Outputs nothing, so the explicit redirection of stdout also affects
stderr.

In contrast to:

% sh -c 'echo stdout; echo stderr >&2' 2> /dev/null |& cat
stdout
stderr

So the explicit redirection of stderr has no effect.


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to