Según su documentación, bash espera hasta que todos los comandos en una tubería hayan terminado de ejecutarse antes de continuar
El shell espera a que finalicen todos los comandos de la canalización antes de devolver un valor.
Entonces, ¿por qué el comando yes | true
termina de inmediato? ¿No debería el yes
bucle para siempre y hacer que la tubería nunca regrese?
Y una pregunta secundaria: de acuerdo con la especificación POSIX , las tuberías de shell pueden elegir regresar después de que finalice el último comando o esperar hasta que finalicen todos los comandos. ¿Las conchas comunes tienen un comportamiento diferente en este sentido? ¿Hay algún caparazón donde yes | true
se repita para siempre?
true
es básicamente un {return 0;}
programa, por lo que no esperaría que se ejecute por mucho tiempo, y mucho menos para siempre.
yes | tee >(true) >/dev/null
hará lo que espera, por cierto,tee
hasta que todos los escritores estén muertos, por lo quetrue
salir no lo interrumpirá por completo.