重定向文件描述符

时间:2014-08-29 09:32:13

标签: shell unix

人!

这到底是做什么的?

exec 4<&1

我理解为&#34;使输出成为fd 4&#34;的输入。但如果是这样,以下为什么不起作用?

echo a 4>temp.log

我希望这会印刷&#34; a&#34;在屏幕上并将其存储在temp.log文件中。 我知道我可以用发球台做同样的事情,但我不知道为什么它不会像这样工作。

我哪里错了?

1 个答案:

答案 0 :(得分:2)

<&是复制输入文件描述符。 4<&1表示创建一个新的文件描述符4,当中读取时,它将获得与fd 1相同的内容。

您需要将stdout写入fd 4 1>&4。但是,它不起作用,因为文件描述符4尚不存在。你必须这样做:

exec 4>temp.log
exec 1>&4

第一行将所有输出重定向到fd 4到该文件;第二个将标准输出重定向到fd 4.然而,它仍然不会做你想要的; &#34;重复&#34;文件描述符并不意味着输出被发送到2个地方,而是它将被发送到其他地方。在这些句子之后,所有输出都将被发送到&#34; temp.log&#34;,但不再发送到先前的标准输出。