Warum gibt `echo bash | bash` sofort aussteigen?
Alle folgenden Operationen sind wirkungslose Operationen:
echo bash | bash
echo dash | dash
echo "bash -c bash" | bash
echo "dash -c dash" | dash
Warum? Für die erste Zeile, zum Beispiel, würde ich davon ausgehen , dass es eine Bash - Instanz erstellen würde, und dann es würde eine andere bash - Instanz wartet auf Eingabe erstellen. Es wartet jedoch nicht auf Eingaben. es geht. Die übergeordnete Bash wird ebenfalls beendet. Beide Bash-Instanzen werden beendet und ich bin wieder bei der Shell-Instanz, von der aus ich diese Befehle gestartet habe. Wo verstehe ich das falsch?
Antworten
Die zweite Instanz bash tut Warten auf Eingabe auf seiner stdin (die das gleiche Rohr ist die bashZeichenfolge aus gelesen wurde), aber es wird nur ein EOF, sobald der echoProzess beendet wird und das Schreibende des Rohres geschlossen ist.
Sie könnten auch versuchen, einen Beitrag zur zweiten Bash zu leisten:
(echo bash; echo echo hjello) | bash
hjello