終端機和 Grepping Stderr:如何運行詳細程式碼並 grep 標準錯誤而不更改其他任何內容?

終端機和 Grepping Stderr:如何運行詳細程式碼並 grep 標準錯誤而不更改其他任何內容?

假設我有一段程式碼,並且它以非常詳細的模式運行。這種最冗長的內容暴露了一條訊息,我想閱讀該訊息以了解一切的進展。然而,終端上充斥著其他內容。

有沒有辦法在不將 stderror 管道轉換到 stdout 管道的情況下 grep 過濾 stderror 輸出?

例如,

my-command 2>&1 | grep something # ok, great; is it possible without the pipe shift?

這可能嗎?

i.e., maybe
my-command 2>(grep something)?

答案1

我將這兩個選項作為答案,即使它們並沒有真正回答問題(答案是“在 bash 中,否”),以防其他人看到這個,並展示交換 stdout 和 stderr 的方法,並確保格式正確(與註釋中不同)。

答案一:假設這是一個您想要運行的程式(我知道它看起來不像命令,但假裝它是;替換全部其中包含您實際想要執行的命令和參數):

{ echo stdout; echo stderr >&2; }

現在假設您只想 grep 某些內容的 stderr,但保持 stdout 不變。

{ echo stdout; echo stderr >&2; } 2> >(grep something)

如果那是全部你這樣做了,你會得到所有的標準輸出和部分標準錯誤,其中有一些東西,所有這些都散佈在其中。您可能希望將 stdout 和 stderr 寫入單獨的檔案以供以後查看:

{ echo stdout; echo stderr >&2; } 2> >(grep something > errorfile) > outputfile

交換 stdout 和 stderr (以及為什麼要這樣做)請參閱https://stackoverflow.com/questions/13299317/io-redirection-swapping-stdout-and-stderr以獲得比我能給出的更好的解釋。

相關內容