在Shell中理解/dev/null 2 > 1命令
在編寫Shell腳本時,經(jīng)常會遇到`/dev/null 2 > 1`這樣的命令。這條命令的作用是將標(biāo)準輸出和錯誤輸出都重定向到/dev/null中,即將所有生成的信息丟棄。接下來我們詳細解釋一下`co
在編寫Shell腳本時,經(jīng)常會遇到`/dev/null 2 > 1`這樣的命令。這條命令的作用是將標(biāo)準輸出和錯誤輸出都重定向到/dev/null中,即將所有生成的信息丟棄。接下來我們詳細解釋一下`command > file 2 > file`與`command > file 2 > 1`之間的區(qū)別。
`command > file 2 > file`的工作原理
首先,`command > file 2 > file`表示將命令產(chǎn)生的標(biāo)準輸出信息和錯誤輸出信息都發(fā)送到file文件中。使用這種寫法時,stdout和stderr都直接發(fā)送到file中,導(dǎo)致file被打開兩次,stdout和stderr會互相覆蓋,實際上使用了FD1和FD2兩個管道同時去占用file。
`command > file 2 > 1`的效果及優(yōu)勢
而`command > file 2 > 1`這條命令則直接將stdout發(fā)送到file,然后stderr繼承了FD1管道后再被發(fā)送到file,這樣file只被打開一次,也只使用一個管道FD1,包含了stdout和stderr的內(nèi)容。從IO效率上看,前一條命令的效率要低于后一條命令,因此在編寫Shell腳本時,我們更傾向于使用`command > file 2 > 1`這樣的寫法。
深入分析shell中的`> /dev/null 2 > 1`命令
在Shell中,經(jīng)常會遇到類似`> /dev/null 2 > 1`這樣的命令,通過`>`符號來定義輸出分解組合。具體來說,“> /dev/null 2 > 1”可以分為五部分:
1. `>`代表重定向到哪里,例如:`echo "123" > /home/123.txt`
2. `/dev/null`代表空設(shè)備文件
3. `2 > 1`表示標(biāo)準錯誤
4. ``表示等同于的意思,`2 > 1`表示2的輸出重定向等同于1
5. `1`表示標(biāo)準輸出,默認值是1,因此`> /dev/null`等同于`1 > /dev/null`
因此,`> /dev/null 2 > 1`也可以寫成`1 > /dev/null 2 > 1`。這條命令的執(zhí)行過程如下:
- `1 > /dev/null`表示標(biāo)準輸出重定向到空設(shè)備文件,即不輸出任何信息到終端,不顯示任何信息
- `2 > 1`表示標(biāo)準錯誤輸出重定向到標(biāo)準輸出,因為之前標(biāo)準輸出已經(jīng)被重定向到了空設(shè)備文件,所以標(biāo)準錯誤輸出也重定向到空設(shè)備文件。
通過以上分析,我們更加深入地理解了`> /dev/null 2 > 1`這個Shell命令在實際應(yīng)用中的作用和效果。