On 23 January 2017 at 15:32, Eric Blake <ebl...@redhat.com> wrote: > On 01/22/2017 04:23 PM, Eliot Moss wrote: >> On 1/22/2017 3:19 PM, David Balažic wrote: >>> Hi! >>> >>> Is this a correct pipe behavior? >>> >>> $ echo booo | tee >(md5sum --tag) >/dev/null >>> MD5 (-) = 9c8b79bdf79ef0ee73a77b8d36d27a2d >>> >>> $ echo booo | tee >(md5sum --tag) | cat >/dev/null >> >> Here's what I think happens, even if it is a bit counter-intuitive: >> >>>(...) creates a subprocess, whose input comes from some kind >> of pipe or socket, and tee is presented with a filename it can >> use to write to that socket. >> >> The *output* of the >(...) subprocess is hooked up to what is >> known to be the output of tee *at the time the subprocess is >> created*. This happens *before* any > redirections are done. > > Rather, all >() and > redirections are performed in left-to-right order. > But you are correct that the second >/dev/null is overwriting the > stdout that was originally given by >(md5sum), and therefore tee is NOT > writing to the md5sum process.
The last part is incorrect. tee is always writing to the md5sum process. It can be verified by redirecting the md5sum output to a file, like >(md5sum > file1), or redirecting the final output to a file instead of /dev/null. In both cases the (correct) md5 hash will be there. Regards, David PS: I verified on SLES 11 that the behavior is the same as in cygwin, so the thread is "technically closed". -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple