Por que sim não preenche o buffer?

Por que sim não preenche o buffer?

Digamos que eu faça algo parecido yes | apt-get install foo. Eu sei que isso yesimprimirá sem parar um monte de y\n's para stdout. Mas apt-getsó pode processar alguns deles. Por que não yespreenche o buffer? Na verdade, ele só imprime a y\nquando 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\nquando solicitado por apt-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 headcomando for concluído, o lado esquerdo do tubo não precisará mais funcionar e o loop "infinito" não existirá mais.

informação relacionada