¿Por qué no llena el buffer?

¿Por qué no llena el buffer?

Digamos que hago algo como yes | apt-get install foo. Sé que yesimprimirá sin parar un montón de y\n's en la salida estándar. Pero apt-getsólo puedo procesar algunos de ellos. ¿Por qué no se yesllena el buffer? ¿En realidad solo imprime un y\ncuando lo solicita apt-get?

Respuesta1

NB, esta no es una respuesta completa, pero la mantengo aquí, principalmente porque hay buenos comentarios a continuación.

¿En realidad solo imprime un y\ncuando lo solicita apt-get?

Sí. El lado derecho de las tuberías funciona al mismo tiempo que el lado izquierdo produce la salida. Además, el lado izquierdo no se "completará" a menos que sea necesario. Por ejemplo, lo siguiente creará un bucle infinito, escribiendo en la terminal hasta que se elimine.

while true; do echo foo; done

Sin embargo, lo siguiente imprimirá 10 líneas y luego saldrá correctamente.

while true; do echo foo; done | head

Una vez que se completa el headcomando, el lado izquierdo de la tubería ya no necesita funcionar y el bucle "infinito" ya no existe.

información relacionada