Por que `echo bash | bash` sair imediatamente?

Oct 05 2020

Todas as seguintes operações são operações sem efeito:

echo bash | bash
echo dash | dash
echo "bash -c bash" | bash
echo "dash -c dash" | dash

Por quê? Para a primeira linha, por exemplo, eu suporia que criaria uma instância bash e, em seguida , criaria outra instância bash aguardando entrada. Mas não espera por entrada; ele sai. O bash pai também é encerrado. Portanto, ambas as instâncias do bash são encerradas e estou de volta a qualquer instância do shell de onde iniciei esses comandos. Onde estou entendendo errado?

Respostas

7 user414777 Oct 05 2020 at 12:45

A segunda instância do bash faz de espera para a entrada em seu stdin (que é o mesmo tubo da bashcadeia foi lida a partir), mas ele só fica um EOF, logo que o echoprocesso foi encerrado eo fim da escrita do tubo foi fechado.

Você também pode tentar fornecer alguma entrada para o segundo bash:

(echo bash; echo echo hjello) | bash
hjello