我很确定我的问题的答案是否定的,但我正在寻求确认。
在Ruby中,以下块:
begin
foo
rescue
bar
ensure
baz
end
将开始执行foo
,如果出现任何错误,它将停止执行foo
并开始执行bar
。
ensure
块是最后运行的代码,无论 foo
期间是否有任何错误。
Java具有相同的结构,但关键字为try
,catch
和finally
。
这是我想要在bash脚本中完成的部分:我想要一段代码片段,它将在我脚本的最末端运行,或者在引发错误并且脚本想要退出后立即运行。 / p>
有没有办法做到这一点?
答案 0 :(得分:0)
假设:
fo
是一个bash函数,在成功时返回0
bar
和baz
是bash函数以下内容应符合您的期望:
foo
if [[ $? != 0 ]]; then
bar
fi
baz
较短的版本:
if ! foo; then
bar
fi
baz
答案 1 :(得分:0)
您可以安装一个将在退出时运行的陷阱处理程序,无论是来自显式exit
命令还是到达脚本末尾。
trap 'echo script exiting with exit code $?' EXIT
答案 2 :(得分:0)
Bash有许多虚假的信号:
EXIT
代码在退出脚本时执行
RETURN
代码在调用return
时执行(通常在函数中)
DEBUG
代码在每个语句
ERR
代码在出错时执行(条件是一种特殊情况)
您可以使用ERR伪信号设置错误的trap
处理程序。例如:
foo() {
echo "Executing foo"
return 1 # non-zero is a failure
}
bar() {
echo "Executing bar"
}
baz() {
echo "Executing baz"
}
trap 'bar' ERR
foo
# Reset trap
trap - ERR
baz
给出:
Executing foo
Executing bar
Executing baz
如果foo
被更改为返回零:
Executing foo
Executing baz
函数通常不会继承ERR
陷阱,但请参阅set -E
。