2018年11月22日 星期四

【記錄】把stderr重新導向到stdout,並pipe到find指令過濾輸出

個人備忘用

正常情況下,要把應用程式的輸出重新導向到檔案可以輸入
target.exe -some_args > output.txt

但如果發現導向後的文字檔沒東西,則可能該程式是將文字輸出到stderr,那就把指令改成
target.exe -some_args 2> output.txt

/* stdin = 0, stdout = 1, stderr = 2 */

又,如果要對程式輸出的文字做處理
例如過濾某些文字所在的行,可以把輸出再pipe( | )到find指令,然後用參數/v來過濾掉不想要的輸出

target.exe -some_args | find /v "what we don't want"

但因為pipe只接受stdout的輸出,如果應用程式是將文字輸出到stderr,那就把指令改成
target.exe -some_args 2>&1 | find /v "what we don't want"

/* 把stderr重新導向到stdout,就可以pipe到find了 */


其它參考
http://forum.twbts.com/viewthread.php?tid=10215