1. 程式人生 > >再談shell之“>/dev/null 2>&1”

再談shell之“>/dev/null 2>&1”

來自:http://www.ixdba.net/a/os/linux/2010/0422/35.html

【轉載時請以超連結形式標明文章出處和作者資訊及本宣告】
原文連結: http://www.ixdba.net/a/os/linux/2010/0422/35.html

今天在自己的一個技術群中又被問道了這麼一個問題,於是又通俗的解釋了一下,做個記錄,大家看看解釋是否清楚!

shell中可能經常能看到:>/dev/null 2>&1

命令的結果可以通過%>的形式來定義輸出

分解這個組合:“>/dev/null 2>&1” 為五部分。

1:> 代表重定向到哪裡,例如:echo "123" > /home/123.txt
2:/dev/null 代表空裝置檔案
3:2> 表示stderr標準錯誤
4:& 表示等同於的意思,2>&1,表示2的輸出重定向等同於1
5:1 表示stdout標準輸出,系統預設值是1,所以">/dev/null"等同於 "1>/dev/null"

因此,>/dev/null 2>&1也可以寫成“1> /dev/null 2> &1”

那麼本文標題的語句執行過程為:
1>/dev/null :首先表示標準輸出重定向到空裝置檔案,也就是不輸出任何資訊到終端,說白了就是不顯示任何資訊。
2>&1 :接著,標準錯誤輸出重定向 到 標準輸出,因為之前標準輸出已經重定向到了空裝置檔案,所以標準錯誤輸出也重定向到空裝置檔案。

說清楚了嗎,大家理解下吧!

順便對比述說下這麼用的好處!

   最常用的方式有:

command > file 2>file  與command > file 2>&1

它們 有什麼不同的地方嗎?


      首先command > file 2>file 的意思是將命令所產生的標準輸出資訊,和錯誤的輸出資訊送到file 中.command  > file 2>file 這樣的寫法,stdout和stderr都直接送到file中, file會被開啟兩次,這樣stdout和stderr會互相覆蓋,這樣寫相當使用了FD1和FD2兩個同時去搶佔file 的管道。
      而command >file 2>&1 這條命令就將stdout直接送向file, stderr 繼承了FD1管道後,再被送往file,此時,file 只被打開了一次,也只使用了一個管道FD1,它包括了stdout和stderr的內容。
      從IO效率上,前一條命令的效率要比後面一條的命令效率要低,所以在編寫shell指令碼的時候,較多的時候我們會command > file 2>&1 這樣的寫法。

(責任編輯:南非螞蟻)

相關推薦

shell“>/dev/null 2>&1

來自:http://www.ixdba.net/a/os/linux/2010/0422/35.html 【轉載時請以超連結形式標明文章出處和作者資訊及本宣告】 原文連結: http://www.ixdba.net/a/os/linux/2010/0422/35.html

linux shell中 /dev/null 2>&1 含義

shell中可能經常能看到:echo log > /dev/null 2>&1 命令的結果可以通過%>的形式來定義輸出/dev/null :代表空裝置檔案>  :代表重定向到哪裡,例如:echo "123" > /home/123.

Linux Shell 1 /dev/null 2 1 含義

shell中可能經常能看到:echo log > /dev/null 2>&1   命令的結果可以通過%>的形式來定義輸出/dev/null :代表空裝置檔案>  :代表重定向到哪裡,例如:echo "123" > /home/123.t

Linux下Shell輸出重定向到空裝置檔案1>/dev/null 2>&1

Linux下使用shell命令時經常使用類似這樣的Shell輸出重定向: 1>/dev/null 2>&1 在Shell命令的結尾,我們可以通過>符號來重定向輸出。 1. 標準輸入stdin檔案描述符為0,標準輸出stdout檔案描述符為1

Shell中的>/dev/null 2>&12>&1 >/dev/null 與&>/dev/null 的區別

預設情況下,總是有三個檔案處於開啟狀態,標準輸入(鍵盤輸入)、標準輸出(輸出到螢幕)、標準錯誤(也是輸出到螢幕),它們分別對應的檔案描述符是0,1,2 。那麼我們來看看下面的幾種重定向方法的區別: >/dev/null 2>&1  //  實際上,應該等

2>/dev/null和>/dev/null 2>&12>&1>/dev/null

Linux中的標準輸入輸出 標準輸入0    從鍵盤獲得輸入 /proc/self/fd/0  標準輸出1    輸出到螢幕(即控制檯) /proc/self/fd/1  錯誤輸出2    輸出到螢幕(即控制檯) /proc/self/fd/2  /dev/null代表l

相關 /dev/null 2>&1 詳解

1:> 代表重定向到哪裡,例如:echo “123” > /home/123.txt 2:/dev/null 代表空裝置檔案 3:2> 表示stderr標準錯誤 4:& 表示等同於的意思,2>&1,表示2的輸出重定向等同於1 5:1 表示stdout標準輸出,系統預設值

Linux後臺執行 nohup command >/dev/null 2>&1 &

Linux shell中有三種輸入輸出,分別為標準輸入,標準輸出,錯誤輸出,分別對應0,1,2。我們可以直接通過輸出重定向>(或>>,表示追加)將某種輸出重定向到其他地方,如裝置,檔案,比如: 1 ls > ls.log  #標準輸出重定向

相關 /dev/null 2>&1 詳解

用 /dev/null 2>&1 這樣的寫法.這條命令的意思是將標準輸出和錯誤輸出全部重定向到/dev/null中,也就是將產生的所有資訊丟棄.    下面就為大家來說一下, command > file 2>file  與command >

nohup /dev/null 2>&1 含義詳解

為何2>&1要寫在後面?command > file 2>&1 首先是command > file將標準輸出重定向到file中, 2>&1 是標準錯誤拷貝了標準輸出的行為,也就是同樣被重定向到file中,最終結果就是標準輸出和錯誤都被重定向到file中。 

crontab 常見 /dev/null 2>&1 詳解

大部分在 crontab 計劃任務中都會年到未尾帶 >/dev/null 2>&1,是什麼意思呢? > 是重定向 /dev/null 代表空裝置檔案 1 表示stdout標準輸出,系統預設值是1,所以 ">/dev/null" 等同於 "

Shell中的>/dev/null 2>&12>&1 >/dev/null 與&>/dev/null 的區別

文件描述符 art 應該 tar 輸入 情況 style 鍵盤 blog 默認情況下,總是有三個文件處於打開狀態,標準輸入(鍵盤輸入)、標準輸出(輸出到屏幕)、標準錯誤(也是輸出到屏幕),它們分別對應的文件描述符是0,1,2 。那麽我們來看看下面的幾種重定向方法的區別: &

【轉】shell命令中>/dev/null 2>&1的實現原理

情況 內存 顯示 都是 style hand 引用 nis roo 異步執行 exec("/alidata/server/php/bin/php /nas/wxdoctor/index.php App/Common/WordsPic/user_id/".$user_

linux系統shell中重定向 標準輸出 錯誤輸出 >/dev/null 2>&1

經常shell指令碼中,會看到: 仔細體會下面例子。 >/dev/null  2>&1 這句話的意思簡單理解為:標準輸出和錯誤輸出都不會輸出出來。 [email protected]:/tmp>date>1.txt >/de

linux shell2>/dev/null和/dev/null 2>&1 的解釋

shell中可能經常能看到:>/dev/null 2>&1 命令的結果可以通過%>的形式來定義輸出 分解這個組合:“>/dev/null 2>&1” 為五部分。 1:> 代表重定向到哪裡,例如:echo "123" > /home

[轉載]>/dev/null 2>&1 含義

eno 結合 解析 and nbsp 並且 描述符 輸入 操作 shell中可能經常能看到:echo log > /dev/null 2>&1 命令的結果可以通過%>的形式來定義輸出/dev/null :代表空設備文件> :代表重定向到

>/dev/null 2>&1的作用

之前 系統默認 std 默認 輸出重定向 默認值 不顯示 意思 bsp 1 表示stdout標準輸出,系統默認值是1,所以">/dev/null"等同於"1>/dev/null" 2 表示stderr標準錯誤 & 表示等同於的意思,2>&

linux ">/dev/null 2>&1 &"

運行 內容 變量 系統默認 命令行 編寫shell 後者 繼承 編寫 0:表示鍵盤輸入(stdin)1:表示標準輸出(stdout),系統默認是1 2:表示錯誤輸出(stderr) command >/dev/null 2>&1 & == co

/dev/null 2>&1 解釋

競爭 文件表 解釋 .sh 導致 情況 () 打印 crontab cmd >a 2>a 和 cmd >a 2>&1 為什麽不同?cmd >a 2>a :stdout和stderr都直接送往文件 a ,a文件會被打開兩遍,由此導致

linux 重定向命令詳解(如1>/dev/null 2>&1)

信息 重定向命令 指定路徑 定向 終端 pre inux 輸入 設備 基礎 0:表示標準輸入stdin 1:表示標準輸出stdout,系統默認為1,可省略(即1>/dev/null等價於>/dev/null) 2:表示標準錯誤stderr >:表示重定向