【shell】1>/dev/null 2>&1 詳解


今天看別人的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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM