昨天我也问了这个问题。感谢所有的答案。但我仍然没有得到它。
我做了
$ exec 6<&0 0</tmp/lines.txt
我想:我的标准输入现在被重定向了。但是文件中的行也被执行了!那么只有这样做才有默认动作吗?这是我的问题。
让我们说
$ cat /tmp/lines.txt
read i j
read i j
echo "i:$i,j:$j">/tmp/res.txt
我做了exec,之后我做了
$ cat /tmp/res.txt
i:read,j:i j
但是当我做的时候
$ exec 6<&0 0</tmp/lines.txt;exec 0<&6 6<&-
没有任何内容被读取或执行。我可以阅读这些内容,但现在我必须自己动手,
$ exec 6<&0 0</tmp/lines.txt ;while read i j;do echo "i:$i,j:$j";done
我在终端上看到了,
i:read,j:i j
i:read,j:i j
i:echo,j:"i:$i,j:$j">/tmp/res.txt
再次感谢,我希望它不会太长,
Eric J.
答案 0 :(得分:1)
exec 6<&0 0</tmp/lines.txt; exec 0<&6 6<&-
事实证明bash仍会执行指定命令或脚本中剩余的内容,然后再次读取命令的输入,这就是为什么在/tmp/lines.txt
之前运行exec 0<&6 6<&-
之前未读取文件/tmp/lines.txt
的原因。
如果您想在exec 0<&6-
执行.
之前执行命令,请返回previous solution。
也可能不是很明显,但您可以使用source
或. /tmp/lines.txt
source /tmp/lines.txt
来实现相同的输出:
{{1}}