使用调试退出主脚本的包装器脚本

时间:2011-02-23 16:18:30

标签: bash scripting error-handling

我有一个按顺序运行多个命令的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 个答案:

答案 0 :(得分: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认真对待?

答案 1 :(得分:0)

我建议使用set -Eeu启动每个脚本。

参见相关帖子:Error handling in Bash