2012-08-30 167 views
3

我在某些源代碼中發現了以下bash命令。這個shell命令是什麼意思是「exec 3>&1>」(logger -t「OKOK」)「

exec 3>&1 > >(logger -t "OKOK") 

這是什麼意思?

據我所知,它將這些日誌重定向到系統日誌。

但是,什麼是3>&1

我從來沒有見過3的文件描述符。

+0

它將fd 3重定向到fd 1,然後將其重定向到記錄器。你的問題到底是什麼,因爲你似乎理解重定向? – Mat

回答

5

確實不同尋常,但它確實存在:

每個打開的文件被分配的文件描述符。 stdin,stdout和stderr的文件描述符分別爲0,1和2。 對於打開其他文件,仍有描述符3到9。將其中一個附加文件描述符分配給stdin,stdout或stderr作爲臨時重複鏈接有時很有用。這簡化了複雜重定向和重新洗牌後恢復到正常狀態。

IO redirection page上找到更多信息。

+0

因此,對於某些命令行應用程序,它會將某些輸出分配給特定的描述符? –

+0

導致在該bash中,我找不到任何分配給文件解析器3. –

0

從這一行開始,打印到STDOUT的所有內容都將由logger進行處理。原始STDOUT已保存在fd3中,因此您可以稍後(如果需要)恢復正常STDOUT。詳情請參閱Advanced BASH Scripting Guide

+0

將某些命令行應用程序喜歡將原始stdout保存到fd3而不是1? –

+0

是的,因爲需要將1發送到記錄器。 – choroba

相關問題