我正在尝试对脚本中调用的每个函数进行验证,如果一个函数失败,则会错误地输出整个脚本。
寻找最佳方法。我觉得我知道一次这样做的好方法,但不能再弄清楚了。
我可以蛮力,但它很讨厌。这就是我如何让它正常工作
copy_files $1
if [ "$?" -ne "0" ]; then
error "Copying files"
return -1
fi
因为我有一个脚本,所以非常难看:
命令1 命令2 指令代码
必须用返回包装所有这些命令并不是很理想。 :(请帮忙!
答案 0 :(得分:3)
command1 || (error "Cmd1 fail"; return -1); command2 || (error "Cmd2 fail"; return -1);
等。等||
运算符表示只有上一个命令失败才会执行下一个命令。 &&
正好相反。括号将要运行的命令分组。
答案 1 :(得分:1)
由于您说要为脚本中的每个命令执行此操作,因此可以插入
set -e
一开始。如果任何命令返回0以外的状态代码,那么该调用会立即退出shell。(例外:条件语句中作为测试一部分的命令,以及&&
或||
后面的命令和进一步的命令)
答案 2 :(得分:0)
你可以这样做:
good() {
return 0;
}
bad() {
return 5;
}
wrapper() {
$1
rc=$?
if [ "$rc" -ne "0" ]; then
echo "error: $1 returned $rc"
exit -1
fi
}
wrapper bad
wrapper good
或者,如果你可以传递一个功能列表,如下:
wrapper() {
for f in $*; do
$f
rc=$?
if [ "$rc" -ne "0" ]; then
echo "error: $f returned ${rc}"
return -1
fi
done
return 0;
}
wrapper good bad
if [ "$?" -ne "0" ]; then
#error handling here
exit -1;
fi