Pourquoi `echo bash | bash` prendre une sortie immédiate?

Oct 05 2020

Toutes les opérations suivantes sont des opérations sans effet:

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

Pourquoi? Pour la première ligne, par exemple, je suppose que cela créerait une instance bash, puis cela créerait une autre instance bash en attente d'entrée. Mais il n'attend pas l'entrée; il sort. Le parent bash se termine également. Ainsi, les deux instances bash se terminent et je suis de retour à l'instance shell à partir de laquelle j'ai lancé ces commandes. Où est-ce que je me trompe?

Réponses

7 user414777 Oct 05 2020 at 12:45

La deuxième instance de bash fait attendre pour l' entrée sur son stdin (qui est la même conduite de la bashchaîne a été lue à partir), mais il ne se EOF dès que le echoprocessus est sorti et l'extrémité d'écriture du tube a été fermé.

Vous pouvez également essayer de contribuer à la deuxième bash:

(echo bash; echo echo hjello) | bash
hjello