Unix系統數據流重定向及相關問題
我們經常會在Unix系統下的一些腳本中看到類似”2>&1″這樣的用法,例如“/path/to/prog 2>&1 > /dev/null &”,那么它的具體含義是什么呢?
Unix系統有幾種輸入輸出流,它們分別與幾個數字有如下的對應關系:0-標準輸入流(stdin),1-標準輸出流(stdout),2-標準錯誤流 (stderr)。
"2>&1"的意思就是將stderr重定向至stdout,并一起在屏幕上顯示出來。如果不加數字,那么默認的Unix系統重定向動作是針對stdout(1)的,比如”ls -l > result”就等價于”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
第一條命令的輸出結果是stderr,因為stdout和stderr合并后一同重定向到/dev/null,但stderr并未被清除,因此仍將在屏幕中顯示出來;第二條命令無輸出,因為當Unix系統 stdout重定向至/dev/null后,stderr又重定向到了stdout,這樣stderr也被輸出到了/dev/null。
/dev/null是什么設備?
/dev/null是“垃圾黑洞”,所有無用的東西都可以寫到里面區。舉個實例,你把一個文件move到/dev/null,那他就永遠消失了,就想掉進了黑洞里。 并不是什么具體的設備。一些不想現實的信息都可以重定向到/dev/null中。
通常用法: #/bin/sh std.sh > /dev/null 2>&1 把標準輸出了標準出錯都重定向到/dev/null,就是空設備,不現實出錯信息。 nohup sh std.sh>/dev/null 2>&1 &,此時nohup.out中將沒有信息。
在Unix系統中,數據流重定向問題,我們就講解到這里了。
【編輯推薦】