2014-08-29 94 views
2

夥計!重定向文件描述符

這究竟做了什麼?

exec 4<&1 

我明白這是「使輸出成爲fd 4的輸入」。但如果是這樣,爲什麼以下不起作用?

echo a 4>temp.log 

我預計這將在屏幕上打印「a」並將其存儲在temp.log文件中。 我知道我可以用三通做同樣的事情,但我不知道爲什麼它不能這樣工作。

我在哪裏錯了?

回答

2

<&是複製輸入文件描述符。 4<&1意味着創建一個新的文件描述符4,當它從讀取時,它將獲得與fd 1相同的內容。

你需要寫你的stdout到fd 4是1>&4。但是,它不起作用,因爲文件描述符4尚不存在。你必須這樣做:

exec 4>temp.log 
exec 1>&4 

第一行將所有的輸出重定向到fd 4到那個文件;第二個將標準輸出重定向到fd 4.然而,它仍然不會做你想要的; 「複製」文件描述符並不意味着輸出被髮送到2個地方,而是發送到其他地方。在這些句子之後,所有的輸出將被髮送到「temp.log」,而不是之前的標準輸出。

+0

Juan,我看到下面的代碼示例: exec 4 <&1; 1> file; 1 <&4; 4怎麼變得和&1一樣,因此可以恢復原狀? – CuriousGuy 2014-08-29 10:55:34

+0

'4 <&1'在fd-4中製作fd-1「位置」的副本,以便稍後使用; '1> file'改變fd-1的含義,以便它被重定向到該文件; '1 <&4'使fd-1指向它的原始位置 – 2014-08-29 10:59:50

+0

是否有命令查看fd表? – CuriousGuy 2014-08-29 11:02:28