首页/系统/Linux 运维命令速查/trap shell 信号与清理钩子
本包目录(613 条)
文件与目录76 条文本处理77 条网络命令82 条
进程与作业69 条
磁盘与文件系统51 条用户与权限44 条日志与排查40 条systemd 与服务42 条包管理34 条性能与监控48 条定时任务与计划50 条

trap shell 信号与清理钩子

脚本的「收尾保障」:退出/中断时删临时文件、收尾子进程、记录失败行号;写可靠脚本的必修课。

Linux 运维命令速查系统更新于 2026-10-12
用途捕获信号与 EXIT/ERR 做清理与善后
语法trap '命令' 信号... / trap - 取消
常用EXIT 退出 INT/TERM 中断 HUP 挂断 ERR 命令失败

基础清理

基础清理
tmp=$(mktemp -d)
trap 'rm -rf "$tmp"' EXIT      # 无论怎么退出都清理

优雅退出与错误定位

优雅退出与错误定位
trap 'echo "[中断] 正在退出"; exit 130' INT TERM
trap 'echo "[ERR] line $LINENO: $BASH_COMMAND" >&2' ERR
set -euo pipefail   # 配合 ERR 陷阱
trap - EXIT 可撤销;子 shell 里设置的 trap 只存在于子 shell 内。

易错点

  • KILL/STOP 无法被捕获(任何进程都不行):别写 trap 这些信号骗自己
  • trap 命令用双引号会在注册时就展开变量:要运行时取值必须用单引号

数据来源与参考

  • man 1 bash(Bash 参考手册 trap 章节)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌