2011-02-23 66 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