De acordo com a documentação, o bash aguarda até que todos os comandos em um pipeline concluam a execução antes de continuar
O shell aguarda a conclusão de todos os comandos no pipeline antes de retornar um valor.
Então, por que o comando yes | truetermina imediatamente? O yesloop não deve para sempre e faz com que o pipeline nunca retorne?
E uma subquestão: de acordo com a especificação POSIX , os pipelines do shell podem optar por retornar após o término do último comando ou aguardar até que todos os comandos sejam concluídos. As conchas comuns têm um comportamento diferente nesse sentido? Existe alguma concha onde yes | truese repita para sempre?
trueé basicamente um {return 0;}programa, então eu não esperaria que fosse executado por muito tempo, muito menos para sempre.
yes | tee >(true) >/dev/nullfará o que você espera, btw, comoteecontinua até que todos os escritores estejam mortos, portanto,truesair não irá atrapalhá-lo completamente.