Bash 脚本,陷阱功能不工作

Bash scripting, trap function not working

我写了一个 shell 脚本,它运行大型模拟并将东西存储到一个临时文件中。我在收到 SIGINT 后使用 trap 命令清理。问题是,清理没有发生。我 运行 使用 -x 选项进行调试并且 rm 命令已被执行。尽管如此,该文件仍然存在。

代码:

exit_prog() {
    rm tmp
    exit 0
}

print_sim_params() {
    echo "$cur_sz"
}

run_sim() {
    cur_sz="$min"
    while [ "$cur_sz" -le "$max" ]; do



        ./sim "$cur_sz"  | awk '{ print , " ",  >> "tmp" }' &
        wait
        cur_sz=`expr $step + $cur_sz`
    done
    wait
}

trap exit_prog SIGINT
trap print_sim_params SIGUSR1

这是与 -x 选项一起使用时的部分输出,如您所见,调用了 exit_prog

+ run_sim
+ cur_sz=100
+ '[' 100 -le 110 ']'
+ ./sim 100 10000
+ wait
+ awk '{ print , " ",  >> "tmp" }'
++ expr 1 + 100
+ cur_sz=101
+ '[' 101 -le 110 ']'
+ ./sim 101 10000
+ wait
+ awk '{ print , " ",  >> "tmp" }'
++ exit_prog
++ rm tmp
++ exit 0

如果将 -f 标记添加到 rm 调用会怎么样?

exit_prog() {
    rm -f tmp.state
    exit 0
}

您也可以 return 从 rm 调用中退出代码以查看发生了什么:

exit_prog() {
    rm -f tmp.state
    exit $?
}