为什么 trap 命令看不到退出代码?
Why is trap command not seeing exit code?
我遇到 EXIT Trap
命令没有看到我的 exit
代码的问题。我尝试将 $var
从 0
设置为 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=$?
之上,它会覆盖可能已经设置的 $?
的值。请务必在 运行 任何可能更改它的命令之前捕获 $?
。
我遇到 EXIT Trap
命令没有看到我的 exit
代码的问题。我尝试将 $var
从 0
设置为 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=$?
之上,它会覆盖可能已经设置的$?
的值。请务必在 运行 任何可能更改它的命令之前捕获$?
。