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檔案中。
不同點: 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的執行引數。 但第乙個 > 的後面可帶也可不帶空格。第二個 > 的左右均不能帶有任何空格。因此比較保險的方法是所有 > 的前後都不帶有空格,準沒錯。
相關 dev null 2 1 詳解
用 dev null 2 1 這樣的寫法.這條命令的意思是將標準輸出和錯誤輸出全部重定向到 dev null中,也就是將產生的所有資訊丟棄.下面就為大家來說一下,command file 2 file與command file 2 1有什麼不同的地方.首先command file 2 file的意思...
相關 dev null 2 1 詳解
用 dev null 2 1 這樣的寫法.這條命令的意思是將標準輸出和錯誤輸出全部重定向到 dev null中,也就是將產生的所有資訊丟棄.下面就為大家來說一下,command file 2 file與command file 2 1有什麼不同的地方.首先command file 2 file的意思...
dev null 2 1 什麼意思
在unix中,標準輸入裝置 stdin是0,stdout 是1,stderr是 2。dev null 2 1這樣的寫法意思是將標準輸出和錯誤輸出全部重定向到 dev null中,也就是將產生的所有資訊丟棄.下面說說command file 2 file與command file 2 1有什麼不同的地...