/dev/null 2>&1

0:表示鍵盤輸入(stdin)
1:表示標準輸出(stdout),系統默認是1
2:表示錯誤輸出(stderr)


"command >/dev/null 2>&1 &"  與 "command 1>/dev/null 2>&1 &"  的意思一樣


1) command:    表示shell命令或者爲一個可執行程序
2) >:       表示重定向到哪裏
3) /dev/null:  表示Linux的空設備文件
4) 2:      表示標準錯誤輸出
5) &1:     &表示等同於的意思,  2>&1表示2的輸出重定向於1
6) &:    表示後臺執行,即這條指令執行在後臺運行

 

1 >/dev/null:表示標準輸出重定向到空設備文件,也就是不輸出任何信息到終端,不顯示任何信息。
2>&1:表示標準錯誤輸出重定向等同於標準輸出,因爲之前標準輸出已經重定向到了空設備文件,所以標準錯誤輸出也重定向到空設
件。


這條命令的意思就是在後臺執行這個程序,並將錯誤輸出2重定向到標準輸出1,然後將標準輸出1全部放到/dev/null文件,也就是清空.
所以可以看出" > /dev/null 2>&1 "常用來避免shell命令或者程序等運行中有內容輸出。

 

重定向,例如 echo "Hello" > /root/1.txt

 

  • command > file 2>file

  • command > file 2>&1

 

相同點:上面兩個命令都可是實現將執行command後的,標準及錯誤輸出重定向到file文件中。

 

不同點: I/O效率上的差異
command 1>file 2>file 這樣的寫法,stdout和stderr都直接送到file中, file會被打開兩次,這樣stdout和stderr會互相覆蓋,這樣寫相當使用了FD1和FD2兩個同時去搶佔file的管道。
command 1>file 2>&1 這條命令就將stdout直接送向file, stderr 繼承了FD1管道後,再被送往file,此時,file只被打開了一次,也只使用了一個管道FD1,它包括了stdout和stderr的內容。從I/O 效率上,前一條命令的效率要比後面一條的命令效率要低,所以在編寫shell腳本的時候,最多的時候我們會command 1>file 2>&1 這樣的寫法, 或 "command >file 2&1"

 

注意:

你要是寫成這樣:command >/dev/null 2>&1 &, 則第一個 > 的前面可以帶有空格;但是如果你寫成這樣: command 1>/dev/null 2>&1 &, 則第一個 > 的前面最好不帶有空格,不然1會被當成command的運行參數。 但第一個 > 的後面可帶也可不帶空格。   第二個 > 的左右均不能帶有任何空格。因此比較保險的方法是所有 > 的前後都不帶有空格,準沒錯。

 

轉: https://www.cnblogs.com/welhzh/p/5688034.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章