静默忽略导出函数中的陷阱

时间:2014-11-26 01:59:07

标签: bash bash-trap bash-function

此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

陷阱在哪里?

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,看看会发生什么。