1

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番目のものは何も書き込まない可能性はありますか?

4

3 に答える 3

2

2つのプロセスをパイプで接続すると、出力が最初のプロセスから2番目のプロセスにリダイレクトされます。したがって、出力を書き込むプロセスを、その出力を何も行わないプロセスに接続すると、出力が発生しなくなります。

対照的に、何もしないプロセスを出力を生成するプロセスに接続すると、後者は通常どおり出力の生成に進みます。

ちなみに、kill 0線の目的は何ですか?ここでそれらが有用な目的を果たしているかどうかは非常に疑わしいです。

于 2012-12-17T15:56:50.900 に答える
2

2番目のものは outputfooを行いますが、2番目のコマンドにパイプされているため、表示されません。

これは、ファイルにリダイレクトすることで証明できます。

$ { { while true; do echo "foo" >> /tmp/f; done; kill 0; } | { sleep 1s; kill 0; } }
$ wc -l /tmp/f
56209
于 2012-12-17T15:59:55.880 に答える
0

echoこれは、2番目のコマンドで、aの出力をの入力としてパイプしているためです。{ sleep 1s; kill 0; }

BASHでパイプがどのように機能するかについての簡単な説明は何ですか?

于 2012-12-17T15:57:27.193 に答える