我在某些源代碼中發現了以下bash命令。這個shell命令是什麼意思是「exec 3>&1>」(logger -t「OKOK」)「
exec 3>&1 > >(logger -t "OKOK")
這是什麼意思?
據我所知,它將這些日誌重定向到系統日誌。
但是,什麼是3>&1
?
我從來沒有見過3的文件描述符。
我在某些源代碼中發現了以下bash命令。這個shell命令是什麼意思是「exec 3>&1>」(logger -t「OKOK」)「
exec 3>&1 > >(logger -t "OKOK")
這是什麼意思?
據我所知,它將這些日誌重定向到系統日誌。
但是,什麼是3>&1
?
我從來沒有見過3的文件描述符。
確實不同尋常,但它確實存在:
每個打開的文件被分配的文件描述符。 stdin,stdout和stderr的文件描述符分別爲0,1和2。 對於打開其他文件,仍有描述符3到9。將其中一個附加文件描述符分配給stdin,stdout或stderr作爲臨時重複鏈接有時很有用。這簡化了複雜重定向和重新洗牌後恢復到正常狀態。
在IO redirection page上找到更多信息。
因此,對於某些命令行應用程序,它會將某些輸出分配給特定的描述符? –
導致在該bash中,我找不到任何分配給文件解析器3. –
從這一行開始,打印到STDOUT的所有內容都將由logger
進行處理。原始STDOUT已保存在fd3中,因此您可以稍後(如果需要)恢復正常STDOUT。詳情請參閱Advanced BASH Scripting Guide。
將某些命令行應用程序喜歡將原始stdout保存到fd3而不是1? –
是的,因爲需要將1發送到記錄器。 – choroba
它將fd 3重定向到fd 1,然後將其重定向到記錄器。你的問題到底是什麼,因爲你似乎理解重定向? – Mat