【问题标题】:Why does Bash trap not capture the exit status for an undefined variable?为什么 Bash 陷阱不捕获未定义变量的退出状态?
【发布时间】:2018-12-11 17:51:10
【问题描述】:

我需要使用陷阱在 Bash 脚本中捕获错误条件。出于这个原因,我的脚本中有set -eset -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 中具有预期的退出状态。
  • 看起来像是在 bash 4.1 中修复的错误。
  • @Inian 我去看看;我只是一次运行一个版本的相同命令,并注意到它在 4.0 和 4.1 之间得到了修复

标签: bash


【解决方案1】:

来自 4.0 和 4.1 之间的更改日志:

x。修复了导致 $?引用时未正确设置 启用 set -u 和 set -e 取消设置变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多