Linux

“command.sh > /dev/null 2>&1”與“command.sh 2>&1 >/dev/null”有什麼區別

  • November 5, 2021

我的 crontab 上有許多 shell 和 python 腳本,它們以以下任一結尾:

command.sh > /dev/null 2>&1

或者

command.sh 2>&1 >/dev/null

我知道:

> 用於重定向

/dev/null是一個黑洞,任何發送的數據都會被丟棄

2是標準錯誤的文件描述符

>用於重定向

&是文件描述符的符號(沒有它,以下 1 將被視為文件名)

1是標準輸出的文件描述符

因此command.sh >/dev/null 2>&1將我的程序的輸出重定向到/dev/null。包括標準錯誤和標準輸出。

兩者都有相同的結果並且工作正常,但是為什麼有些人使用第一種類型而有些人使用另一種呢?

這些命令正在執行兩個重定向:

  • > /dev/null將標準輸出重定向到/dev/null
  • 2>&1將標準錯誤重定向到標準輸出

正如您猜對的那樣,全域效果是標準輸出和標準錯誤都被重定向到/dev/null.

這兩個重定向都意味著由 shell 解釋,而不是由實際呼叫的程序解釋;因此它們被附加到命令行的末尾。儘管它們的影響是累積的,但它們在邏輯上是不同的;因此可以按您喜歡的任何順序指定它們。

**TL;DR:**這兩個命令是完全等價的,區別純粹是裝飾性的。

引用自:https://serverfault.com/questions/1082701