On Mon, Aug 22, 2016 at 10:38 PM, <helmut.karlow...@ish.de> wrote:

> When doing redirection inside a sub-process to a descriptor that is
> redirected to a file the output of the subshell goes into the file.
>
> Now when the same descriptor is again redirected to another descriptor for
> this whole
> command-list, the output of the sub-process goes to the other descriptor.
>
> Except when the subshell is subject to process-substitution: In this
> case the outer redirection has no effect to the sub-process. Why is that?
>
> Example:
>
> rm -f tb.err
> exec 3>tb.err
> echo ------ 1 ----------
> (echo 1 1>&3) 3>&1
> echo ........tb.err ...........
> cat tb.err
> echo ------ 2 ---------
> echo >(echo 2 1>&3) 3>&1
> echo ........tb.err ...........
> cat tb.err
> echo ------ 3 ---------
> echo >(echo 3 1>&3)
> echo ........tb.err ...........
> cat tb.err
>
> Only test 3 should print 3 into tb.err. bash and ksh93 also print
> into tb.err in test 2, which is inconsistent compared to case 1. What's so
> special about process-substitution regarding redirection?
>
> -Helmut
>

Case 1 is totally different from the other two. 3>&1 redirects the fds for
the coumpound command (  )

Case 2 is not really special, the redirection applies to the command (the
first echo) not to its arguments in the same way  echo $(echo 4 1>&3) 3>&1
prints in the file

There is also another case that may be interesting:

echo 3>&1 > >(echo 5 1>&3)

in which 5 is not printed in the file, which makes sense to me as the
process substitution is part of the redirections and not of the arguments.

Reply via email to