我有一个按顺序运行多个命令的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
..
}
理想情况下,命令失败时的输出还应包括(除行号外)命令名称和参数。
答案 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