3

パイピングとリダイレクトに関する質問への回答で、Robert は、パイピングはパイプラインで置換されたプロセスの stdout もキャプチャするが、リダイレクトはキャプチャしないと述べています。これはなぜですか?正確には何が起こっているのか、その結果、次の動作が発生します。

bash-4.1$ echo -e '1\n2' | tee >(head -n1) >redirect
1
bash-4.1$ cat redirect
1
2
bash-4.1$ echo -e '1\n2' | tee >(head -n1) | cat >pipe
bash-4.1$ cat pipe
1
2
1

どちらの形式でも同じ結果、つまり後者の結果が得られると私は考えていたでしょう。

別の質問への回答を読むと、コマンドでリダイレクトの順序を変更すると望ましい結果が得られる可能性があると思われましたが、順序に関係なく、結果は常に同じです。

bash-4.1$ echo -e '1\n2' | tee >redirect >(head -n1)
1
bash-4.1$ cat redirect
1
2
bash-4.1$ echo -e '1\n2' | >redirect tee >(head -n1)
1
bash-4.1$ cat redirect
1
2

teestdout リダイレクトが にのみ影響するのに、パイプが置換されたプロセスもキャプチャするのはなぜheadですか? 単に「設計上」?


上記の質問に関連する考え: ファイルにリダイレクトして出力パイプすることは決して意味がないと思いましたが、プロセス置換では意味があります:

bash-4.1$ echo -e '1\n2\n3' | tee >(head -n1) >(tail -n1) >tee_out | cat >subst_out
bash-4.1$ cat tee_out
1
2
3
bash-4.1$ cat subst_out
1
3
4

3 に答える 3