yes ではバッファがいっぱいにならないのはなぜですか?

yes ではバッファがいっぱいにならないのはなぜですか?

たとえば、 のような操作を行うとします。が stdout に を連続して出力するyes | apt-get install fooことはわかっています。 しかし、そのうちのいくつかしか処理できません。 がバッファを埋め尽くさないのはなぜでしょうか。 は、によって要求されたときだけ を出力するのでしょうか。yesy\napt-getyesy\napt-get

答え1

注意:これは完全な回答ではありませんが、主に下に良いコメントがあるため、ここに残しておきます。

y\n実際にはから要求された場合にのみ を印刷するのでしょうかapt-get?

はい。パイプの右側は左側が出力を生成するのと同時に動作します。さらに、左側は必要な場合を除き「完了」しません。たとえば、次のコードは無限ループを作成し、終了するまでターミナルに書き込みます。

while true; do echo foo; done

ただし、次の例では 10 行が出力され、正常に終了します。

while true; do echo foo; done | head

コマンドが完了するとhead、パイプの左側はそれ以上動作する必要がなくなり、「無限」ループはなくなります。

関連情報