Unix系統(tǒng)數(shù)據(jù)流重定向及相關(guān)問題
我們經(jīng)常會(huì)在Unix系統(tǒng)下的一些腳本中看到類似”2>&1″這樣的用法,例如“/path/to/prog 2>&1 > /dev/null &”,那么它的具體含義是什么呢?
Unix系統(tǒng)有幾種輸入輸出流,它們分別與幾個(gè)數(shù)字有如下的對(duì)應(yīng)關(guān)系:0-標(biāo)準(zhǔn)輸入流(stdin),1-標(biāo)準(zhǔn)輸出流(stdout),2-標(biāo)準(zhǔn)錯(cuò)誤流 (stderr)。
"2>&1"的意思就是將stderr重定向至stdout,并一起在屏幕上顯示出來。如果不加數(shù)字,那么默認(rèn)的Unix系統(tǒng)重定向動(dòng)作是針對(duì)stdout(1)的,比如”ls -l > result”就等價(jià)于”ls -l 1 > result”。這樣便于我們更普遍性的理解重定向過程。
下面舉例說明:
- #cat std.sh
- #!/bin/sh
- echo “stdout”
- echo “stderr” >&2
- #/bin/sh std.sh 2>&1 > /dev/null
- stderr
- #/bin/sh std.sh > /dev/null 2>&1
第一條命令的輸出結(jié)果是stderr,因?yàn)閟tdout和stderr合并后一同重定向到/dev/null,但stderr并未被清除,因此仍將在屏幕中顯示出來;第二條命令無輸出,因?yàn)楫?dāng)Unix系統(tǒng) stdout重定向至/dev/null后,stderr又重定向到了stdout,這樣stderr也被輸出到了/dev/null。
/dev/null是什么設(shè)備?
/dev/null是“垃圾黑洞”,所有無用的東西都可以寫到里面區(qū)。舉個(gè)實(shí)例,你把一個(gè)文件move到/dev/null,那他就永遠(yuǎn)消失了,就想掉進(jìn)了黑洞里。 并不是什么具體的設(shè)備。一些不想現(xiàn)實(shí)的信息都可以重定向到/dev/null中。
通常用法: #/bin/sh std.sh > /dev/null 2>&1 把標(biāo)準(zhǔn)輸出了標(biāo)準(zhǔn)出錯(cuò)都重定向到/dev/null,就是空設(shè)備,不現(xiàn)實(shí)出錯(cuò)信息。 nohup sh std.sh>/dev/null 2>&1 &,此時(shí)nohup.out中將沒有信息。
在Unix系統(tǒng)中,數(shù)據(jù)流重定向問題,我們就講解到這里了。
【編輯推薦】






















