0

昨天我也问了这个问题。感谢所有的答案。但我还是不明白。

我做了

$ 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

再次感谢,希望不会太长,

埃里克·J。

4

1 回答 1

1
exec 6<&0 0</tmp/lines.txt; exec 0<&6 6<&-

事实证明,bash 在再次读取命令的输入之前仍然执行指定命令或脚本中剩余的内容,这就是为什么您的文件/tmp/lines.txt没有被读取,因为exec 0<&6 6<&-它在它之前运行。

如果要在执行之前执行命令,请参考之前的解决方案/tmp/lines.txtexec 0<&6-

此外,它可能并不明显,但您可以使用.orsource来实现相同的输出:

. /tmp/lines.txt
source /tmp/lines.txt
于 2013-09-10T11:59:27.347 回答