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

时间:2013-09-09 14:42:55

标签: bash

当我这样做时,

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

bash退出。为什么呢?

谢谢,

Eric J.

1 个答案:

答案 0 :(得分:3)

这使得来自/tmp/lines.txt的bash读取命令在进程中重定向其输入。在文件中的所有命令之后将不再有任何要处理的输入,因此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-)