Plainnotes

脚本里的临时文件,用 trap 清理

2024-09-22 · 2 分钟工具

脚本里 mktemp 建了临时文件,正常结束会删,Ctrl-C 或者中途报错就留在那儿了。

tmp=$(mktemp)
trap 'rm -f "$tmp"' EXIT INT TERM

EXIT 覆盖正常退出和 set -e 触发的退出,INT/TERM 覆盖手动中断和 kill。引号里的变量在 trap 执行时才展开,所以要用单引号,双引号会在注册时就固定住。

多个临时文件就写多条,或者用一个清理函数:

cleanup() { rm -rf "$workdir"; }
trap cleanup EXIT

注意 trap 会被后续的 trap 覆盖,别在函数里不小心重设。