Por que o sim não enche o buffer?

4

Digamos que eu faça algo como yes | apt-get install foo . Eu sei que yes irá parar de imprimir um monte de y\n para stdout. Mas apt-get só pode processar alguns deles. Por que yes não preenche o buffer? Na verdade, só imprime y\n quando solicitado por apt-get ?

    
por Jamie 18.10.2014 / 00:18

1 resposta

2

N.B. esta não é uma resposta completa, mas estou mantendo aqui, principalmente porque há bons comentários abaixo.

  

Na verdade, só imprime y\n quando solicitado por apt-get ?

Sim. O lado direito dos tubos funciona ao mesmo tempo que o lado esquerdo produz a saída. Além disso, o lado esquerdo não vai para "conclusão", a menos que seja necessário. Por exemplo, o seguinte irá criar um loop infinito, escrevendo no terminal até ser morto.

while true; do echo foo; done

No entanto, o seguinte imprimirá 10 linhas e sairá normalmente.

while true; do echo foo; done | head

Quando o comando head for concluído, o lado esquerdo do pipe não precisará mais funcionar e o loop "infinito" não existirá mais.

    
por Sparhawk 18.10.2014 / 02:30