用 bash trap 在退出时自动清理临时文件

为脚本注册清理函数:无论是正常结束、Ctrl-C 中断还是被 kill,都能自动删除临时文件、释放资源。

Linuxtrap 信号处理Bash 脚本Shell命令行高风险
在脚本开头加入 trap 'rm -rf "$TMPDIR"' EXIT INT TERM,无论脚本如何结束都会清理临时文件。

01命令

命令
$ trap 'rm -rf "$TMPDIR"; echo cleaned' EXIT INT TERM

02作用说明

trap 让 bash 在特定事件发生时执行指定命令:EXIT 在脚本以任何方式结束时触发(成功、出错或信号),INT 和 TERM 则捕获 Ctrl-C 和 kill,确保进程退出前先完成同样的清理。这一行就能取代散落在脚本每个退出点的脆弱清理代码。trap 应放在创建临时目录之后,动作用单引号包裹以便变量在触发时才展开;处理函数除了删除文件,还可以用来发送通知或还原被修改的文件。

03风险

风险高风险
!注意: 千万不要写未加引号的 trap 'rm -rf $TMPDIR' 且不做检查——一旦 TMPDIR 为空,处理函数就变成 rm -rf /;请始终给变量加引号并在动作内部检查是否为空。

04撤销

✓无需撤销——该命令不会改变持久状态。

05来源

  • signal(7) — Linux manual page
    man7.org · community · 2026-09-17
    依据: Reference for SIGINT/SIGTERM semantics, the signals scripts most commonly need to trap for cleanup.
  • bash(1) — Linux manual page
    Arch Linux · community · 2026-09-17
    依据: Documents trap: EXIT runs its action on shell exit, INT/TERM on the corresponding signals; a trap set without arguments resets it.

最后验证: 2026-09-18 · 分类: 开发者