如何在Bash中將stderr重定向到stdout

將命令的輸出重定向到文件或將其通過管道傳遞到另一個命令時,您可能會注意到錯誤消息顯示在屏幕上。

在Bash和其他Linux Shell中,執行程序時,它使用三個標準I / O流。 每個流都由一個數字文件描述符表示:

  • 0stdin,標準輸入流。
  • 1stdout,標準輸出流。
  • 2stderr,標準錯誤流。

文件描述符只是代表打開文件的數字。

輸入流通常通過鍵入鍵盤為程序提供信息。

程序輸出進入標準輸入流,錯誤消息進入標準錯誤流。 默認情況下,輸入流和錯誤流都打印在屏幕上。

重定向輸出#

重定向是一種捕獲程序輸出並將其作為輸入發送到另一個程序或文件的方法。

可以使用 n> 操作員,在哪裡 n 是文件描述符號。

什麼時候 n 被省略,默認為 1,標準輸出流。 例如,以下兩個命令是相同的; 兩者都會重定向命令輸出(stdout)到文件中。

command > file
command 1> file

重定向標準錯誤(stderr) 使用 2> 操作員:

command 2> file

您可以同時寫 stderrstdout 到兩個單獨的文件:

command 2> error.txt 1> output.txt

要阻止錯誤消息顯示在屏幕上,請重定向 stderr/dev/null

command 2> /dev/null

重新導向 stderrstdout

將程序的輸出保存到文件中時,重定向是很常見的 stderrstdout 這樣您就可以將所有內容保存在一個文件中。

重定向 stderrstdout 並將錯誤消息發送到與標準輸出相同的文件,請使用以下命令:

command > file 2>&1

> file 重定向 stdoutfile2>&1 重定向 stderr 到的當前位置 stdout

重定向的順序很重要。 例如,以下示例僅重定向 stdoutfile。 發生這種情況是因為 stderr 重定向到 stdout 之前 stdout 被重定向到 file

command 2>&1 > file 

重定向的另一種方法 stderrstdout 是使用 &> 構造。 在重擊中 &> 與…具有相同的含義 2>&1

command &> file

結論#

在命令行上工作時,了解重定向和文件描述符的概念非常重要。

重定向 stderrstdout, 使用 2>&1 要麼 &> 結構體。

如果您有任何疑問或反饋,請隨時發表評論。

bash終端

Sidebar