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

YuJ*_*Kim 3 debugging shell-script

以下所有操作都是无效操作:

echo bash | bash
echo dash | dash
echo "bash -c bash" | bash
echo "dash -c dash" | dash
Run Code Online (Sandbox Code Playgroud)

为什么?例如,对于第一行,我假设它会创建一个 bash 实例,然后会创建另一个等待输入的 bash 实例。但它不等待输入;它退出。父 bash 也退出。所以两个 bash 实例都退出了,我又回到了我从中启动这些命令的任何 shell 实例。我哪里弄错了?

use*_*777 7

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

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

(echo bash; echo echo hjello) | bash
hjello
Run Code Online (Sandbox Code Playgroud)