1

我编写了一个 shell 脚本,它运行大型模拟并将内容存储到一个临时文件中。我trap在收到SIGINT. 问题是,清理工作没有发生。我使用-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 $1, " ", $11 >> "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 $1, " ", $11 >> "tmp" }'
++ expr 1 + 100
+ cur_sz=101
+ '[' 101 -le 110 ']'
+ ./sim 101 10000
+ wait
+ awk '{ print $1, " ", $11 >> "tmp" }'
++ exit_prog
++ rm tmp
++ exit 0
4

1 回答 1

2

如果您添加-f标志来rm调用怎么办?

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

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

exit_prog() {
    rm -f tmp.state
    exit $?
}
于 2015-04-18T00:07:52.100 回答