为什么 trap 命令看不到退出代码?

Why is trap command not seeing exit code?

我遇到 EXIT Trap 命令没有看到我的 exit 代码的问题。我尝试将 $var0 设置为 1,现在我正在尝试用 1 覆盖 exit 并基于具有trap命令运行特定代码。

#!/bin/bash

if [[ 0 -ge 1 ]]; then
    echo "run code"
else
    echo "oops.. dont like what I see"
    exit 1
fi

finish() {
    sleep 5
    term=$?
    if [[ $term -eq 0 ]]; then
        echo pass
    else
        echo fail
    fi
}
trap 'finish' EXIT

当我对代码进行故障排除时。当 exit 被触发时,term 被分配给 0

这里有两个问题:

  • 因为 trap 'finish' EXIT 行位于脚本的底部,所以在执行到该点之前调用的任何 exit 命令都不会接受陷阱。

    要解决此问题,请将 finish 函数的声明和激活它的 trap 命令移动到脚本中可能出现 exit 的第一点上方

  • 因为 sleep 5 紧接在 term=$? 之上,它会覆盖可能已经设置的 $? 的值。请务必在 运行 任何可能更改它的命令之前捕获 $?