在一些Shell腳本中,特別是Crontab的腳本中,經(jīng)常會看到>/dev/null2>&1這樣的寫法。
其實這個很好理解。我們分兩部分解釋。
1.>/dev/null
大家知“>”(右尖括號)在unix/linuxshell中表示輸入到的意思,就是把”>”左邊的內(nèi)容輸入到”>”右邊。
比如:echotext>1.txt就把“text”這個文本輸入到1.txt這個文件中。
那么“/dev/null”又是個什么東東呢?它代表一個空設(shè)備,即不存在的設(shè)備。也就是說,拋棄”>”左邊的內(nèi)容,不進(jìn)行輸出。
2.2>&1
這個其實是三個部分組成的:2,>&,1。我們先來搞清楚這里的2和1是什么意思。在/usr/include/unistd.h中,你可以找到如下代碼。
#defineSTDIN_FILENO0#defineSTDOUT_FILENO1#defineSTDERR_FILENO2
這是三種不同的流。
2代表stderr.
1代表sdtout.
而&>則表示把符號左邊的內(nèi)容以符號右邊的形式輸出。
2&>1就是把,把stderr做為stdout輸出。
現(xiàn)在我們結(jié)合這兩個部分來看。2&>1定義了把stderr做為標(biāo)準(zhǔn)的stdout流輸出,然后stdout的內(nèi)容全部寫入/dev/null,也就是說被舍棄掉。
結(jié)論就是,無論執(zhí)行的是什么命令,哪怕運(yùn)行中出現(xiàn)了error都不會有回顯。

愛華網(wǎng)



