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 $?
}
我写了一个 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 $?
}