Por que `echo bash | bash` sair imediatamente?
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
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