假設我有一段程式碼,並且它以非常詳細的模式運行。這種最冗長的內容暴露了一條訊息,我想閱讀該訊息以了解一切的進展。然而,終端上充斥著其他內容。
有沒有辦法在不將 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以獲得比我能給出的更好的解釋。