如何在Bash中將stderr重定向到stdout
將命令的輸出重定向到文件或將其通過管道傳遞到另一個命令時,您可能會注意到錯誤消息顯示在屏幕上。
在Bash和其他Linux Shell中,執行程序時,它使用三個標準I / O流。 每個流都由一個數字文件描述符表示:
0
—stdin
,標準輸入流。1
—stdout
,標準輸出流。2
—stderr
,標準錯誤流。
文件描述符只是代表打開文件的數字。
輸入流通常通過鍵入鍵盤為程序提供信息。
程序輸出進入標準輸入流,錯誤消息進入標準錯誤流。 默認情況下,輸入流和錯誤流都打印在屏幕上。
重定向輸出#
重定向是一種捕獲程序輸出並將其作為輸入發送到另一個程序或文件的方法。
可以使用 n>
操作員,在哪裡 n
是文件描述符號。
什麼時候 n
被省略,默認為 1
,標準輸出流。 例如,以下兩個命令是相同的; 兩者都會重定向命令輸出(stdout
)到文件中。
command > file
command 1> file
重定向標準錯誤(stderr
) 使用 2>
操作員:
command 2> file
您可以同時寫 stderr
和 stdout
到兩個單獨的文件:
command 2> error.txt 1> output.txt
要阻止錯誤消息顯示在屏幕上,請重定向 stderr
至 /dev/null
:
command 2> /dev/null
重新導向 stderr
至 stdout
#
將程序的輸出保存到文件中時,重定向是很常見的 stderr
至 stdout
這樣您就可以將所有內容保存在一個文件中。
重定向 stderr
至 stdout
並將錯誤消息發送到與標準輸出相同的文件,請使用以下命令:
command > file 2>&1
> file
重定向 stdout
至 file
和 2>&1
重定向 stderr
到的當前位置 stdout
。
重定向的順序很重要。 例如,以下示例僅重定向 stdout
至 file
。 發生這種情況是因為 stderr
重定向到 stdout
之前 stdout
被重定向到 file
。
command 2>&1 > file
重定向的另一種方法 stderr
至 stdout
是使用 &>
構造。 在重擊中 &>
與…具有相同的含義 2>&1
:
command &> file
結論#
在命令行上工作時,了解重定向和文件描述符的概念非常重要。
重定向 stderr
和 stdout
, 使用 2>&1
要麼 &>
結構體。
如果您有任何疑問或反饋,請隨時發表評論。
bash終端