Digamos que hago algo como yes | apt-get install foo
. Sé que yes
imprimirá sin parar un montón de y\n
's en la salida estándar. Pero apt-get
sólo puedo procesar algunos de ellos. ¿Por qué no se yes
llena el buffer? ¿En realidad solo imprime un y\n
cuando 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\n
cuando lo solicitaapt-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 head
comando, el lado izquierdo de la tubería ya no necesita funcionar y el bucle "infinito" ya no existe.