昨天我也问了这个问题。感谢您的所有答案。但我仍然不明白。
我做了
$ 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
我做高管,然后我做
$ 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
再次感谢,希望不要太长,
埃里克·
exec 6<&0 0</tmp/lines.txt; exec 0<&6 6<&-
事实证明,bash 在再次读取命令输入之前仍然执行指定命令或脚本中剩余的内容,这就是为什么您的文件/tmp/lines.txt
没有被读取的原因,因为exec 0<&6 6<&-
是在它之前运行的。
exec 0<&6-
之前在/tmp/lines.txt
中执行命令,请参阅前面的解决方案。
此外,它可能并不明显,但您可以使用.
或source
来实现相同的输出:
. /tmp/lines.txt
source /tmp/lines.txt