2011-02-23 65 views
4

我有一個bash腳本,它按順序運行幾個命令,如果返回非零的錯誤代碼並顯示行號以幫助查找命令,則停止。用調試退出主腳本的包裝腳本

在每個命令之後,我運行一個函數(exitIfLastCommandReturnCodeNotZero),檢查退出代碼是否正常,如果不是,則顯示行號和錯誤代碼。例如:

.. 
cmd1 param1 param2 ; exitIfLastCommandReturnCodeNotZero $? $LINENO 
cmd2 param1 param2 ; exitIfLastCommandReturnCodeNotZero $? $LINENO 
cmd3 param1 param2 ; exitIfLastCommandReturnCodeNotZero $? $LINENO 
.. 

這很好,但是有一個內置函數或腳本,它可以包裝命令並給我相同的功能?例如:

.. 
wrapperScript cmd1 param1 param2 
wrapperScript cmd2 param1 param2 
wrapperScript cmd3 param1 param2 
.. 

或甚至更好的'塊'級功能,它運行所有命令並在一個命令失敗時退出。例如:

WRAPPERSCRIPT_PSEUDOCODE { 
.. 
cmd1 param1 param2 
cmd2 param1 param2 
cmd3 param1 param2 
.. 
} 

理想情況下,命令失敗時的輸出還應包括(除行號外)命令名稱和參數。

回答

2

使用陷阱。如果您願意,您可以在代碼中的各個位置打開和關閉陷阱。

#!/bin/bash 
function error 
{ 
    local err=$? 
    echo "error# $err on line $BASH_LINENO: $BASH_COMMAND" 
    exit $err 
} 
trap error ERR 
# Some commands ... 
echo bar 
/bin/false foo # For testing 
echo baz 

exitIfLastCommandReturnCodeNotZero認真嗎?

+0

你可能想'設置-E'這樣的功能,子shell和命令替換繼承的陷阱。 – 2011-02-23 17:21:19

+0

這是輝煌的。 – zaf 2011-02-23 20:20:17