
たとえば、 のような操作を行うとします。が stdout に を連続して出力するyes | apt-get install foo
ことはわかっています。 しかし、そのうちのいくつかしか処理できません。 がバッファを埋め尽くさないのはなぜでしょうか。 は、によって要求されたときだけ を出力するのでしょうか。yes
y\n
apt-get
yes
y\n
apt-get
答え1
注意:これは完全な回答ではありませんが、主に下に良いコメントがあるため、ここに残しておきます。
y\n
実際にはから要求された場合にのみ を印刷するのでしょうかapt-get
?
はい。パイプの右側は左側が出力を生成するのと同時に動作します。さらに、左側は必要な場合を除き「完了」しません。たとえば、次のコードは無限ループを作成し、終了するまでターミナルに書き込みます。
while true; do echo foo; done
ただし、次の例では 10 行が出力され、正常に終了します。
while true; do echo foo; done | head
コマンドが完了するとhead
、パイプの左側はそれ以上動作する必要がなくなり、「無限」ループはなくなります。