為什麼 yes 沒有填滿緩衝區?

為什麼 yes 沒有填滿緩衝區?

說我做了類似的事情yes | apt-get install foo。我知道這yes會不間斷地將一堆y\n' 打印到標準輸出。但apt-get只能處理其中的一些。為什麼yes緩衝區沒有填滿?它實際上只y\n在 要求時打印 a 嗎apt-get

答案1

請注意,這不是一個完整的答案,但我將其保留在這裡,主要是因為下面有很好的評論。

它實際上只y\n在 要求時打印 a 嗎apt-get

是的。管道的右側在左側工作的同時產生輸出。此外,除非需要,左側不會「完成」。例如,以下內容將建立一個無限循環,寫入終端直到被終止。

while true; do echo foo; done

然而,下面將列印出 10 行,然後正常退出。

while true; do echo foo; done | head

命令完成後head,管道的左側不再需要工作,「無限」循環也不再存在。

相關內容