2013-02-27 79 views
0

我正在嘗試捕獲命令的輸出。如果該命令執行,它工作正常。但是,當出現錯誤時,我無法捕獲命令行中顯示的內容。例如,如何從提示符捕獲錯誤信息 - shell或perl

$ out=`/opt/torque/bin/qsub submitscript` 
qsub: Unauthorized Request MSG=group ACL is not satisfied: user [email protected], queue home 
$ echo $out 

$ 

我想$出有消息

謝謝!

回答

3

錯誤是在標準錯誤,所以你需要將其重定向到標準輸出,因此反引號將捕獲它:

out=`/opt/torque/bin/qsub submitscript 2>&1` 
if [ $? -gt 0 ] ; then 
    # By convention, this is sent to stderr, but if you need it on 
    # stdout, just remove the >&2 redirection 
    echo "Error: $out" >&2 
else 
    echo "Success: $out" 
fi 

應測試退出該命令的狀態來確定輸出代表什麼(單向顯示)。這與perl類似,當然語法略有不同。

+1

有一個錯誤發送到stderr的原因,這應該得到尊重。錯誤屬於stderr:'echo「錯誤:$ out」>&2' – 2013-02-28 00:53:46

+0

作爲一般規則,是的。我不知道OP的要求是什麼,所以我選擇不要混淆這個問題。在少數情況下,將事情合併到標準輸出對於進一步處理或日誌記錄非常有用。我將編輯答案以使選項清晰。 – William 2013-02-28 14:42:26

2

您是否嘗試過做這樣

$ out=`/opt/torque/bin/qsub submitscript 2>&1 > /dev/null` 
$ echo $out