shell中使用>/dev/null 2>&1 丟棄信息
在一些Shell腳本中,特別是Crontab的腳本中,經常會看到 >/dev/null 2>&1這樣的寫法。
其實這個很好理解。我們分兩部分解釋。
1. >/dev/null
大家知 “>”(右尖括號) 在unix/linux shell 中表示 輸入到 的意思,就是把”>”左邊的內容輸入到”>”右邊。
比如:echo text>1.txt 就把“text”這個文本輸入到1.txt這個文件中。
那么 “/dev/null” 又是個什么東東呢?它代表一個空設備,即不存在的設備。也就是說,拋棄”>”左邊的內容,不進行輸出。
2. 2>&1
這個其實是三個部分組成的:2, >&, 1 。我們先來搞清楚這里的2和1是什么意思。在/usr/include/unistd.h中,你可以找到如下代碼。
#define STDIN_FILENO 0 #define STDOUT_FILENO 1 #define STDERR_FILENO 2
這是三種不同的流。
2代表stderr.
1代表sdtout.
而 >& 則表示把符號左邊的內容以符號右邊的形式輸出。
2>&1 就是把,把stderr做為stdout輸出。
現在我們結合這兩個部分來看。2&>1定義了把stderr做為標准的stdout流輸出,然后stdout的內容全部寫入/dev/null,也就是說被舍棄掉。
結論就是,無論執行的是什么命令,哪怕運行中出現了error都不會有回顯。