← 全部文章

技术与生活 / 一篇记录

临时文件的善后交给 trap

临时资源需要在成功和失败两条路径上都能释放。

脚本中间某一步失败时,普通写在末尾的清理语句未必还能执行。退出处理器能集中释放临时资源,让主要流程不必在每个错误分支重复清理代码。

从一个例子看起

以下示例使用 Bash,请在独立测试目录中理解输入、输出和退出码。

tmp=$(mktemp); trap 'rm -f -- "$tmp"' EXIT; printf 'demo\n' > "$tmp"

退出脚本后确认临时文件已被清理。

排查时再往前走一步

在成功和主动报错两条路径上分别测试,确认都只删除自己创建的文件。重要业务操作仍需有恢复方案,清理临时文件不能替代事务。

退出处理器应尽量简单,不依赖已被覆盖的变量。若还需保留原始错误状态,可以先保存退出码,再执行清理并返回该状态,避免清理动作的成功掩盖主要任务的失败。

trap 无法处理所有断电或强制终止场景,清理逻辑还应具备幂等性。

参考:Shell 文档。

搜索文章

输入关键词,找回一篇记录。