
我經常遇到在 if 語句中使用這種語法的小型 bash 腳本:
some command > /dev/null 2>&1
輸出 like that 的目的是什麼/dev/null
,意味著什麼2>&1
?
它似乎總是有效,但我想知道它在做什麼。
答案1
>/dev/null
將命令標準輸出重新導向到空設備,這是一種特殊設備,會丟棄寫入其中的資訊
2>&1
將標準錯誤流重新導向到標準輸出流(stderr = 2,stdout = 1)。請注意,這採用標準錯誤流並將其指向與當時標準輸出相同的位置。這就是順序的原因,>/some/where 2>&1
因為需要先將標準輸出指向某個地方,然後然後如果想最終合併兩個流,請將 stderr 指向同一位置。
實際上,它會阻止顯示命令的任何輸出(stdout 和 stderr)。當您不關心命令輸出時使用它。
答案2
STDIN 以 0 表示,STDOUT 以 1 表示,STDERR 以 2 表示。
/dev/空是位桶:您轉儲不需要的任何東西的地方。
因此,STDOUT 被重定向到位桶(垃圾),STDERR 被重定向到 STDOUT 所在的位置:位元桶。
您也可以這樣做:
>/dev/null 2>/dev/null