此Bash脚本的行为符合预期。
test_this.sh
function run_this() {
trap "echo TRAPPED" EXIT
false
echo $?
}
run_this
打印
1
TRAPPED
但是,当我尝试导出此功能时,它无法捕获。
test_this2.sh
function run_this() {
trap "echo TRAPPED" EXIT
false
echo $?
}
export -f run_this
在命令行中输入并运行它:
> source test_this2.sh
> run_this
结果
1
陷阱在哪里?
答案 0 :(得分:1)
当您trap
函数时,export
会被忽略,因为当您从exit
shell(函数导出到的地方)login
时,不再有shell
打印trapped
in。(即从来没有exit
,否则你将不再有shell。)当你source test_this2.sh
时,你在{login shell
中执行它。 1}}。当函数完成后,它将返回到您的login shell
- 没有退出。当您运行test_this.sh
时,它会在subshell
中执行{ {1}}退出,您会打印subshell
。如果您真的想看看trapped
exit
login shell
时发生的情况,请尝试输入exit
,看看会发生什么。