On Wed, Aug 08, 2001 at 05:27:20PM +0200, Reinhard Foerster wrote:
On Wed, Aug 08, 2001 at 04:49:27PM +0200, Christian Perle wrote:
echo BBB | (echo AAA ; cat)
[1]
Mir ist noch unklar, warum in diesem Fall BBB bei cat noch ankommt, bei
echo BBB | echo AAA ; cat
[2]
aber nicht. Genauer: Wieso bekommen in der Subshell BEIDE Kommandos die Pipe als input? Wer vonden beiden die BBB zuerst liest, hat sie. Bei
echo BBB | (cat ; cat)
[3]
gibt das erste cat die BBB aus.
Im Fall [2] werden zwei separate Prozesse ausgeführt, die nix miteinander zu tun haben, nämlich "echo BBB | echo AAA" und "cat". Die Pipe verbindet stdout von "echo BBB" mit stdin von "echo AAA". Im Fall [1] wird stdout von "echo BBB" erst mit "echo AAA" und dann mit "cat" verbunden (eigentlich werden die sie vom Vaterprozeß erben [siehe "double fork"]). Wenn aber im Fall [3] in der Klammer zwei "cat" stehen, dann ist beim zweiten cat die Pipe schon leer. Die Klammer legt also die Precedence von '|' und ';' fest.
Eric