我有一個oneliner,不可避免地會產生一些我想忽略的錯誤,所以我試圖將它重定向到一個文件,但它一直在屏幕上顯示。這是它的樣子:無法將stderr重定向到文件
command1 | command2 | command3 1> stdout.txt 2> stderr.txt
我也嘗試過他們倆發送到同一個文件(&>),但標準錯誤只是不希望它是非常令人沮喪。
我有一個oneliner,不可避免地會產生一些我想忽略的錯誤,所以我試圖將它重定向到一個文件,但它一直在屏幕上顯示。這是它的樣子:無法將stderr重定向到文件
command1 | command2 | command3 1> stdout.txt 2> stderr.txt
我也嘗試過他們倆發送到同一個文件(&>),但標準錯誤只是不希望它是非常令人沮喪。
您需要重定向標準錯誤您管道的每個階段。你可以這樣做如下:
command1 2>&1 | command 2
或(在bash至少):
command1 |& command2
(見bash man page的管道部分)。
stderr
文件描述符不經過管道,只有stdout
。您可以嘗試通過
commandThatDoesNotExist | less
你會看到什麼在less
,但錯誤會在終端上寫。要管stderr
文件描述符,它重定向到stdout
點
commandThatDoesNotExist 2>&1 | less
現在你看到的錯誤less
。
爲了不stderr
在終端上,你必須每個命令的文件描述符重定向到stderr
文件:
command 1 2>stderr.txt | command 2 2>stderr.txt | command 3 2>stderr.txt 1>stdout.txt
您的命令是否向stderr寫入錯誤? – jdigital
我不知道我必須在每個命令後添加重定向。我想他們都是通過管道「聚集」的。它現在有效。如果你可以發佈這個答案,所以我可以給你一些「真實」的信用,那很好。謝謝 ! –