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 | true
termina imediatamente? O yes
loop 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 | true
se 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/null
fará o que você espera, btw, comotee
continua até que todos os escritores estejam mortos, portanto,true
sair não irá atrapalhá-lo completamente.