为什么`echo bash | bash` 立即退出?

为什么`echo bash | bash` 立即退出?

以下所有操作均为无效果操作:

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

为什么?例如,对于第一行,我假设它将创建一个 bash 实例,然后将创建另一个等待输入的 bash 实例。但它并不等待输入;它退出了。父 bash 也退出。因此,两个 bash 实例都会退​​出,并且我会回到启动这些命令的任何 shell 实例。我哪里理解错了?

答案1

第二个 bash 实例等待其 stdin 上的输入(与bash读取字符串的管道相同),但只有在进程echo退出并且管道的写入端已关闭时,它才会收到 EOF。

您也可以尝试为第二个 bash 提供一些输入:

(echo bash; echo echo hjello) | bash
hjello

相关内容