假设我做了类似的事情yes | apt-get install foo
。我知道这yes
会不间断地将一堆y\n
' 打印到标准输出。但apt-get
只能处理其中的一些。yes
为什么缓冲区没有填满?y\n
它实际上只在 要求时打印 a 吗apt-get
?
注意,这不是一个完整的答案,但我将其保留在这里,主要是因为下面有很好的评论。
y\n
它实际上只在 要求时打印 a 吗apt-get
?
是的。管道的右侧在左侧工作的同时产生输出。此外,除非需要,左侧不会“完成”。例如,以下内容将创建一个无限循环,写入终端直到被终止。
while true; do echo foo; done
Run Code Online (Sandbox Code Playgroud)
然而,下面将打印出 10 行,然后正常退出。
while true; do echo foo; done | head
Run Code Online (Sandbox Code Playgroud)
命令完成后head
,管道的左侧不再需要工作,“无限”循环也不再存在。