2
夥計!重定向文件描述符
這究竟做了什麼?
exec 4<&1
我明白這是「使輸出成爲fd 4的輸入」。但如果是這樣,爲什麼以下不起作用?
echo a 4>temp.log
我預計這將在屏幕上打印「a」並將其存儲在temp.log文件中。 我知道我可以用三通做同樣的事情,但我不知道爲什麼它不能這樣工作。
我在哪裏錯了?
夥計!重定向文件描述符
這究竟做了什麼?
exec 4<&1
我明白這是「使輸出成爲fd 4的輸入」。但如果是這樣,爲什麼以下不起作用?
echo a 4>temp.log
我預計這將在屏幕上打印「a」並將其存儲在temp.log文件中。 我知道我可以用三通做同樣的事情,但我不知道爲什麼它不能這樣工作。
我在哪裏錯了?
<&
是複製輸入文件描述符。 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」,而不是之前的標準輸出。
Juan,我看到下面的代碼示例: exec 4 <&1; 1> file; 1 <&4; 4怎麼變得和&1一樣,因此可以恢復原狀? – CuriousGuy 2014-08-29 10:55:34
'4 <&1'在fd-4中製作fd-1「位置」的副本,以便稍後使用; '1> file'改變fd-1的含義,以便它被重定向到該文件; '1 <&4'使fd-1指向它的原始位置 – 2014-08-29 10:59:50
是否有命令查看fd表? – CuriousGuy 2014-08-29 11:02:28