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 | truetermina de inmediato? ¿No debería el yesbucle 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 | truese repita para siempre?
truees 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/nullhará lo que espera, por cierto,teehasta que todos los escritores estén muertos, por lo quetruesalir no lo interrumpirá por completo.