今天看別人的shell腳本,里面用到了【1>/dev/null 2>&1】,這個是我之前沒有用過的,於是學習了博友的一篇文章:https://www.cnblogs.com/xingmeng/archive/2013/08/12/3252390.html
以下自己稍做整理,方便自己記憶和復習。
先將此命令組合進行拆解為如下2個部分(一長串的命令看起來會很懵,拆解后進行理解就很容易啦。我剛開始學習shell的時候,就習慣拿着別人的命令去拆解,然后弄明白每個字符的意思,這種方式真的很有效):
1)1>/dev/null:
1,指stdout標准輸出,系統默認值是1;
>,指重定向;
/dev/null,指控設備文件。
所以,此部分的執行結果是:將標准輸出的內容寫入空設備文件(其實就是不想記錄輸出的日志),若需要記錄,則將/dev/null替換為日志文件的名稱即可。
2)2>&1:
2,指stderr標准錯誤;
&,是“等同於”的意思;
1,即stdout
所以,此部分的執行結果是:將標准錯誤stderr的內容寫入標准輸出stdout。而我們的前段命令將stdout的結果輸出到了空設備文件,因此,stderr的內容最終也是輸出到了空設備文件。
【小疑問】
為什么不用【1>/dev/null 2>/dev/null】來代替以上寫法呢?
答:用寫法2的話,則stdout和stderr都打開了同一個文件/dev/null,stdout和stderr會互相覆蓋。而寫法1,是將stderr先送往stdout,/dev/null僅被stdout打開,所有stdout的內容(包括stderr送過來的)統一由stdout送往/dev/null。
