首頁  >  文章  >  後端開發  >  linux shell中'2>&1'意義

linux shell中'2>&1'意義

巴扎黑
巴扎黑原創
2017-06-26 15:20:132026瀏覽

在計劃任務中經常可以看到。例如我們公司的計劃任務舉例:

*/2 * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index.php task testOne >/dev/null 2>&1*/2 * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index.php task testTwo >/dev/null 2>&1

對於& 1 更準確的說應該是文件描述符 1,而1標識標準輸出,stdout。
對於2 ,表示標準錯誤,stderr。
2>&1 的意思是將標準誤差重定向到標準輸出。這裡標準輸出已經重定向到了 /dev/null。那麼標準錯誤也會輸出到/dev/null

可以把/dev/null 可以看作"黑洞". 它等價於一個只寫檔案. 所有寫入它的內容都會永遠遺失. 而試著從它那兒讀取內容則什麼也讀不到.

偶爾也可以把& 在指令的最後加上,表示讓程式後台執行。

為何2>&1要寫在後面?

index.php task testOne >/dev/null 2>&1

我們可以理解為,左邊是標準輸出,好,現在標準輸出直接輸入到/dev/null 中,而2>& 1是將標準錯誤重定向到標準輸出,所以當程式產生錯誤的時候,相當於錯誤流向左邊,而左邊依舊是輸入到/dev/null中。

可以理解為,如果寫在中間,那會把隔間標準輸出指定輸出的檔案

#你可以用

ls 2>1測試一下,不會報沒有2檔的錯誤,但會輸出一個空的檔案1;
ls xxx 2>1測試,沒有xxx這個檔的錯誤輸出到了1中;
ls xxx 2>&1測試,不會產生1這個檔案了,不過錯誤跑到標準輸出了;
ls xxx >out.txt 2>&1, 實際上可換成ls xxx 1>out.txt 2>&1;重定向符號>預設是1,錯誤和輸出都傳到out.txt了。

 

以上是linux shell中'2>&1'意義的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn