在脚本中使用 Bash 信号捕获 | Linux 中国( 二 )
如果要在 Bash 中实现信号捕获 , 只需要在 trap 后加上需要执行的命令 , 再加上需要捕获的信号列表就可以了 。
例如 , 下面的这行语句可以捕获到在进程运行时用户按下 Ctrl + C 组合键发出的 SIGINT 信号:
trap "{ echo 'Terminated with Ctrl+C'; }" SIGINT
因此 , 上文中脚本的缺陷可以通过使用 trap 捕获 SIGINT、SIGTERM、进程错误退出、进程正常退出等信号 , 并正确处理临时目录的方式来修复:
#!/usr/bin/env bashCWD=`pwd`TMP=${TMP:-/tmp/tmpdir}trap \ "{ /usr/bin/rm -r "${TMP}" ; exit 255; }" \ SIGINT SIGTERM ERR EXIT## create tmp dirmkdir "${TMP}"tar xf "${1}" --directory "${TMP}"## move to tmp and run commandspushd "${TMP}"for IMG in *.jpg; domogrify -verbose -flip -flop "${IMG}"donetar --create --file "${1%.*}".tar *.jpg## move back to originpopd## zip tarbzip2 --compress $TMP/"${1%.*}".tar \--stdout > "${1%.*}".tbz
对于更复杂的功能 , 还可以用 Bash 函数 来简化 trap 语句 。
Bash 中的信号捕获信号捕获可以让脚本在无论是否成功执行所有任务的情况下都能够正确完成清理工作 , 能让你的脚本更加可靠 , 这是一个很好的习惯 。 尽管尝试把信号捕获加入到你的脚本里看看能够起到什么作用吧 。
【在脚本中使用 Bash 信号捕获 | Linux 中国】via: opensource.com
作者: Seth Kenlon 选题: lujun9972 译者: HankChow 校对: wxy
本文由 LCTT 原创编译 ,Linux中国 荣誉推出
点击“了解更多”可访问文内链接
- 或使用天玑1000+芯片?荣耀V40已全渠道开启预约
- 苹果将推出使用mini LED屏的iPad Pro
- 手机能用多久?如果出现这3种征兆,说明“默认使用时间”已到
- 苹果有望在2021年初发布首款使用mini LED显示屏的 iPad Pro
- 笔记本保养有妙招!学会这几招笔记本再战三年
- 程序员开发抢茅台脚本:2天就刷榜Github
- 数据可视化三节课之二:可视化的使用
- 索尼sw77与sw55的使用差别感受
- 爆料称一加9系列与潜望式镜头无缘 继续使用普通长焦
- 太空舱|四川绵阳:中国首款智慧移宿空间亮相 使用寿命可达50年