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

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

>/dev/null 2>&1 
spa

//  實際上,應該等同於這樣: 1>/dev/null 2>/dev/null ,默認狀況下就是1,標準輸出,因此通常都省略。 而&符號,後面接的是必須的文件描述符。不能寫成2>1,這樣就成了標準錯誤重定向到文件名爲1的文件中了,而不是重定向標準錯誤到標準輸出中。因此這裏就是:標準輸出重定向到了/dev/null,而標準錯誤又重定向到了標準輸出,因此就成了標準輸出和標準錯誤都重定向到了/dev/nullorm


2>&1 >/dev/null it

// 咋一看,這個跟上面那個有啥區別呢,不也是標準錯誤重定向到標準輸出,而標準輸出重定向到/dev/null麼? 最後不該該都重定向/dev/null麼? 我是這麼理解的!一條指令同一時刻要麼產生標準錯誤,要麼產生標準輸出。 當產出標準錯誤的時候,因這個標準錯誤重定向到了標準輸出,而標準輸出是輸出到屏幕。這個時候標準輸出尚未被重定向到/dev/null,因而在屏幕上打印了。當產生標準輸出時,那麼它就不是標準錯誤,2>&1無效,因而標準輸出重定向dev/null,不打印到屏幕。因此最終結果將是:標準錯誤打印到屏幕,而標準輸出不打印到屏幕。class

 &>/dev/null    // 這個就是,無論你是啥玩意兒文件描述符,統統重定向到/dev/null變量



----------方法

以如下變量的方式作個解釋,就很明顯了,這兩種方式是不一樣的,前者就像:margin

a=1重定向

b=atop


然後者就像:

b=a

a=1

相關文章
相關標籤/搜索