bash には 2 つのプログラムがあります。
{ { sleep 1s; kill 0; } | { while true; do echo "foo"; done; kill 0;} }
と
{ { while true; do echo "foo"; done; kill 0; } | { sleep 1s; kill 0; } }
(ちょうど順序を変更しました)。
最初のものは出力に多くの「foo」を書き込み、2番目のものは何も書き込まない可能性はありますか?
2つのプロセスをパイプで接続すると、出力が最初のプロセスから2番目のプロセスにリダイレクトされます。したがって、出力を書き込むプロセスを、その出力を何も行わないプロセスに接続すると、出力が発生しなくなります。
対照的に、何もしないプロセスを出力を生成するプロセスに接続すると、後者は通常どおり出力の生成に進みます。
ちなみに、kill 0
線の目的は何ですか?ここでそれらが有用な目的を果たしているかどうかは非常に疑わしいです。
2番目のものは outputfoo
を行いますが、2番目のコマンドにパイプされているため、表示されません。
これは、ファイルにリダイレクトすることで証明できます。
$ { { while true; do echo "foo" >> /tmp/f; done; kill 0; } | { sleep 1s; kill 0; } }
$ wc -l /tmp/f
56209
echo
これは、2番目のコマンドで、aの出力をの入力としてパイプしているためです。{ sleep 1s; kill 0; }