在 Bash 中重定向标准输入意味着 Bash 退出



当我这样做时,

$ exec 6<&0 0</tmp/lines.txt

巴什退出。为什么?

谢谢

埃里克·

这使得

bash从/tmp/lines.txt读取命令,并在进程中重定向其输入。在文件中的所有这些命令之后,将不再有任何输入需要处理,因此 shell 只会在它之后退出,就像执行 shell 脚本一样。

如果你想在处理完/tmp/lines.txt 中的命令后不让 bash 退出,请确保你可以放回它的输入,如下所示:

exec 6<&0 < <(cat /tmp/lines.txt; echo; echo "exec <&6";)

它既发送/tmp/lines.txt的输入作为命令,也发送exec <&6,将来自进程替代封装的&6输入。

还有一个更清洁的方法:

exec 6<&0 < <(cat /tmp/lines.txt; echo; echo "exec <&- <&6 6<&-";)

或者简单地说:

exec 6<&0 < <(cat /tmp/lines.txt; echo; echo "exec <&6-)

最新更新