我正在執行一個程序,將崩潰報告轉儲到STDERR
中,我必須從中篩選出一些必要的信息。問題是,我無法STDERR
重定向到STDOUT
和PIPE
它grep
在csh中重定向stderr
command 2>&1 >/dev/null | grep "^[^-]" >& /tmp/fl
四處錯誤:Ambiguous output redirect.
下的bash終端相同的命令作品。 我應該改變什麼才能使它工作?
我正在執行一個程序,將崩潰報告轉儲到STDERR
中,我必須從中篩選出一些必要的信息。問題是,我無法STDERR
重定向到STDOUT
和PIPE
它grep
在csh中重定向stderr
command 2>&1 >/dev/null | grep "^[^-]" >& /tmp/fl
四處錯誤:Ambiguous output redirect.
下的bash終端相同的命令作品。 我應該改變什麼才能使它工作?
csh
是顯著比bash的更有限的,當它涉及到文件重定向。在csh
,您可以重定向stdout
與通常>
操作,您可以使用>&
運營商都stdout
和stderr
重定向,可以通過管道stdout
和stderr
與|&
運營商,但沒有一個單一的運營商單獨重定向stderr
。
通常的解決辦法是在一個子shell來執行命令,在子shell你想要的任何文件(/dev/null
在這種情況下)重定向stdout
,然後用|&
操作重定向的stdout
和stderr
子shell到主shell中的下一個命令。
在你的情況,這意味着類似:
(command >/dev/null) |& grep "^[^-]" >&/tmp/fl
因爲stdout
被重定向到/dev/null
子shell裏面,|&
運營商最終會在bash作爲2>&1
- 因爲stdout
在被丟棄子外殼,沒有任何寫到stdout
將永遠到達管道。
如果你不介意混合輸出和錯誤進入管道可以使用
command |& grep "^[^-]" >& /tmp/fl
否則,你可以做黑客:
(command >/dev/null) |& grep "^[^-]" >& /tmp/fl
其標準輸出分離出來爲null,則管道stdout和stderr只會將 stderr作爲內容。
我認爲通常的解決方法是調用'sh':'sh -c「命令2>&1>/dev/null」' –
@WilliamPursell是的,當然。我認爲他出於某種原因想留在csh。 –