歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix資訊 >> Unix系統數據流重定向及相關問題

Unix系統數據流重定向及相關問題

日期:2017/3/6 11:39:14   编辑: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”。這樣便於我們更普遍性的理解重定向過程。

下面舉例說明:

  1. #cat std.sh
  2. #!/bin/sh
  3. echo “stdout”
  4. echo “stderr” >&2
  5. #/bin/sh std.sh 2>&1 > /dev/null
  6. stderr
  7. #/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系統中,數據流重定向問題,我們就講解到這裡了。

Copyright © Linux教程網 All Rights Reserved