我有一个按顺序运行几个命令的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
..
}
理想情况下,命令失败时的输出还应包括(除行号外)命令名称和参数.
最佳答案 使用陷阱.如果您愿意,可以在代码中的不同位置打开和关闭陷阱.
#!/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认真吗?