以下所有操作均为无效果操作:
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