shell中可能常常能看到:>/dev/null 2>&1 shell
eg:sudo kill -9 `ps -elf |grep -v grep|grep $1|awk '{print $4}'` 1>/dev/null 2>/dev/nullspa
命令的結果能夠經過%>的形式來定義輸出
/dev/null 表明空設備文件
> 表明重定向到哪裏,例如:echo "123" > /home/123.txt
1 表示stdout標準輸出,系統默認值是1,因此">/dev/null"等同於"1>/dev/null"
2 表示stderr標準錯誤
& 表示等同於的意思,2>&1,表示2的輸出重定向等同於1
那麼本文標題的語句:
1>/dev/null 首先表示標準輸出重定向到空設備文件,也就是不輸出任何信息到終端,說白了就是不顯示任何信息。
2>&1 接着,標準錯誤輸出重定向等同於 標準輸出,由於以前標準輸出已經重定向到了空設備文件,因此標準錯誤輸出也重定向到空設備文件。awk
/////////////////////file
腳本只使用標準輸入、標準輸出和標準錯誤
Shell會自動爲咱們打開和關閉0、一、2這三個文件描述符,咱們不須要顯式地打開或關閉它們。標準輸入是命令的輸入,默認指向鍵盤;標準輸出是命令的輸出,默認指向屏幕;標準錯誤是命令錯誤信息的輸出,默認指向屏幕。
若是沒有顯式地進行重定向,命令經過文件描述符0從屏幕讀取輸入,經過文件描述符1和2將輸出和錯誤信息輸出到屏幕。但若是咱們想從其餘文件(再次強調,I/O設備在Unix/Linux中也是文件)讀取輸入或產生輸出,就須要對0、一、2使用重定向了。其語法以下:
command < filename 把標準輸入重定向到filename文件中
command 0< filename 把標準輸入重定向到filename文件中
command > filename 把標準輸出重定向到filename文件中(覆蓋)
command 1> fielname 把標準輸出重定向到filename文件中(覆蓋)
command >> filename 把標準輸出重定向到filename文件中(追加)
command 1>> filename 把標準輸出重定向到filename文件中(追加)
command 2> filename 把標準錯誤重定向到filename文件中(覆蓋)
command 2>> filename 把標準輸出重定向到filename文件中(追加)
command > filename 2>&1 把標準輸出和標準錯誤一塊兒重定向到filename文件中(覆蓋)
command >> filename 2>&1 把標準輸出和標準錯誤一塊兒重定向到filename文件中(追加)
command < filename >filename2 把標準輸入重定向到filename文件中,把標準輸出重定向終端
到filename2文件中
command 0< filename 1> filename2 把標準輸入重定向到filename文件中,把標準輸出重定向語法
到filename2文件中
重定向的使用有以下規律:
1)標準輸入0、輸出一、錯誤2須要分別重定向,一個重定向只能改變它們中的一個。
2)標準輸入0和標準輸出1能夠省略。(當其出現重定向符號左側時)
3)文件描述符在重定向符號左側時直接寫便可,在右側時前面加&。
4)文件描述符與重定向符號之間不能有空格!grep