
說我做了類似的事情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
,管道的左側不再需要工作,「無限」循環也不再存在。