shell文件中的>/dev/null 2>&1

文件描述符java

當執行shell命令時,會默認打開3個文件,每一個文件有對應的文件描述符來方便咱們使用:linux

 

類型 文件描述符 默認狀況 對應文件句柄位置
標準輸入(standard input) 0 從鍵盤得到輸入 /proc/self/fd/0
標準輸出(standard output) 1 輸出到屏幕(即控制檯) /proc/self/fd/1
錯誤輸出(error output) 2 輸出到屏幕(即控制檯) /proc/self/fd/2

 

因此咱們平時在執行shell命令中,都默認是從鍵盤得到輸入,而且將結果輸出到控制檯上。可是咱們能夠經過更改文件描述符默認的指向,從而實現輸入輸出的重定向。好比咱們將1指向文件,那麼標準的輸出就會輸出到文件中。shell

 

輸出重定向.net

輸出重定向的使用方式很簡單,基本的一些命令以下:code

 

命令 介紹
command >filename 把標準輸出重定向到新文件中
command 1>filename 同上
command >>filename 把標準輸出追加到文件中
command 1>>filename 同上
command 2>filename 把標準錯誤重定向到新文件中
command 2>>filename 把標準錯誤追加到新文件中

 

咱們使用>或者>>對輸出進行重定向。符號的左邊表示文件描述符,若是沒有的話表示1,也就是標準輸出,符號的右邊能夠是一個文件,也能夠是一個輸出設備。當使用>時,會判斷右邊的文件存不存在,若是存在的話就先刪除,而後建立一個新的文件,不存在的話則直接建立。可是當使用>>進行追加時,則不會刪除原來已經存在的文件。htm

重定向綁定get

好了,在有了以上知識的基礎上,咱們再來看開頭提到的>/dev/null 2>&1。這條命令其實分爲兩命令,一個是>/dev/null,另外一個是2>&1input

1. >/dev/nulltable

這條命令的做用是將標準輸出1重定向到/dev/null中。 /dev/null表明linux的空設備文件,全部往這個文件裏面寫入的內容都會丟失,俗稱「黑洞」。那麼執行了>/dev/null以後,標準輸出就會再也不存在,沒有任何地方可以找到輸出的內容。後臺

2. 2>&1

這條命令用到了重定向綁定,採用&能夠將兩個輸出綁定在一塊兒。這條命令的做用是錯誤輸出將和標準輸出同用一個文件描述符,說人話就是錯誤輸出將會和標準輸出輸出到同一個地方。

linux在執行shell命令以前,就會肯定好全部的輸入輸出位置,而且從左到右依次執行重定向的命令,因此>/dev/null 2>&1的做用就是讓標準輸出重定向到/dev/null中(丟棄標準輸出),而後錯誤輸出因爲重用了標準輸出的描述符,因此錯誤輸出也被定向到了/dev/null中,錯誤輸出一樣也被丟棄了。執行了這條命令以後,該條shell命令將不會輸出任何信息到控制檯,也不會有任何信息輸出到文件中。

nohup結合

咱們常常使用nohup command &命令形式來啓動一些後臺程序,好比一些java服務:

# nohup java -jar xxxx.jar &

爲了避免讓一些執行信息輸出到前臺(控制檯),還會加上剛纔提到的>/dev/null 2>&1命令來丟棄全部的輸出:

# nohup java -jar xxxx.jar >/dev/null 2>&1 &

 

原文:https://www.jb51.net/article/106373.htm

相關文章
相關標籤/搜索