【发布时间】:2018-12-11 17:51:10
【问题描述】:
我需要使用陷阱在 Bash 脚本中捕获错误条件。出于这个原因,我的脚本中有set -e 和set -u。但是我注意到脚本中定义的陷阱没有得到错误状态。例如:
set -e
set -u
on_exit() {
exit_status=$?
echo exit_status=$exit_status
exit $exit_status
}
trap on_exit EXIT
X=$Y
上面的sn-p打印:
line 12: Y: unbound variable
exit_status=0
而我期望错误状态为非零。去掉set -e后错误状态正确报为1。
这是什么原因?
Bash 版本:GNU bash,版本 3.2.57(1)-release (x86_64-apple-darwin15)
【问题讨论】:
-
在jdoodle 上返回
exit_status=1 jdoodle.sh: line 13: Y: unbound variable -
也许
ret是在你的程序中定义的,等于0?如果是这样,${ret:=$?}将是$ret。你能在on_exit函数之前打印ret吗? -
您使用的是哪个版本的
bash?我可以在 3.2 中重现您的问题,但它在 4.4 中具有预期的退出状态。 -
看起来像是在
bash4.1 中修复的错误。 -
@Inian 我去看看;我只是一次运行一个版本的相同命令,并注意到它在 4.0 和 4.1 之间得到了修复
标签: bash