Digamos que eu faça algo parecido yes | apt-get install foo
. Eu sei que isso yes
imprimirá sem parar um monte de y\n
's para stdout. Mas apt-get
só pode processar alguns deles. Por que não yes
preenche o buffer? Na verdade, ele só imprime a y\n
quando solicitado por apt-get
?
Responder1
NB, esta não é uma resposta completa, mas estou mantendo-a aqui, principalmente porque há bons comentários abaixo.
Na verdade, ele só imprime a
y\n
quando solicitado porapt-get
?
Sim. O lado direito dos tubos funciona ao mesmo tempo que o lado esquerdo produz saída. Além disso, o lado esquerdo não irá para a "conclusão", a menos que seja necessário. Por exemplo, o seguinte criará um loop infinito, escrevendo no terminal até ser eliminado.
while true; do echo foo; done
No entanto, o seguinte imprimirá 10 linhas e sairá normalmente.
while true; do echo foo; done | head
Depois que o head
comando for concluído, o lado esquerdo do tubo não precisará mais funcionar e o loop "infinito" não existirá mais.