2015-08-20 68 views
-1

在shell腳本中,1 is file descriptor for standard output2 is for standard error。現在,由於這兩點都指向了什麼是使用 2>&1。他們不是已經指向同一個設備嗎?2>&1在shell腳本中的用途是什麼

+5

http://stackoverflow.com/questions/818255/in-the-shell-what-does-21-mean?rq=1 –

+1

歡迎來到Stack Exchange,請看看http://stackoverflow.com /幫助/詢問並做適當的研究,以便做有用的問題 – Javier

回答

3

簡短的回答是要重定向到stderr這樣stdout你寫FD2以及對FD1正常輸出寫入FD1兩個錯誤消息。 (FD =文件描述符)。它通常允許您捕獲要保存在日誌文件中的錯誤消息的輸出等。否則,只有通過將stdout重定向到日誌才能捕獲這些錯誤消息。

進行了簡短的背景,你的shell有3個,涵蓋基本的閱讀和寫作衆所周知的文件描述符:

- 標準輸入(在輸入緩衝區)

- 標準輸出(你的正常輸出描述符)

- stderr(你的正常錯誤描述符)

當您讀取或寫入時,幾乎任何編程語言(包括您的shell)都使用這些常用文件描述符來管理輸入/輸出。在您的shell中,您可以重定向或合併stdoutstderr的輸出。一般格式爲:

m > &n ## where n & m are 1, 2 

您可以組合,例如,無論從任何命令stdoutstderr到一個文件:

./someprogram > myfile 2>&1 

這基本上說,「採取從someprogram輸出上stdout重定向到myfile而包括stdoutstderr

有幾個很好的參考,一個是BASH Programming - Introduction HOW-TO: All about redirection

注意:請確保您明白重定向可以發生在臨時(每個命令的基礎上),或者可以使用exec爲腳本範圍設置。

相關問題