加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell – 收到SIGINT或SIGTERM时是否需要执行trap EXIT?

发布时间:2020-12-15 22:57:46 所属栏目:安全 来源:网络整理
导读:我有一个简单的脚本 trap 'echo exit' EXITwhile true; do sleep 1; done 并且它在不同的shell中表现不同: $bash tst.sh^Cexit$dash tst.sh^C$zsh tst.sh^C$sh tst.sh^Cexit 所以我不确定它应该如何操作以及它是否被指定. 解决方法 EXIT陷阱在每个shell中的
我有一个简单的脚本

trap 'echo exit' EXIT
while true; do sleep 1; done

并且它在不同的shell中表现不同:

$bash tst.sh
^Cexit
$dash tst.sh
^C
$zsh tst.sh
^C
$sh tst.sh
^Cexit

所以我不确定它应该如何操作以及它是否被指定.

解决方法

EXIT陷阱在每个shell中的工作方式都不一样.几个例子:

>在dash和zsh中,它仅由脚本中的常规退出触发.
>在zsh中,如果捕获通常会退出执行的信号,则需要
通过显式调用exit来恢复默认行为.

我建议你实际捕获信号然后退出,它应该是便携式的
横跨大多数炮弹:

$cat trap
trap 'echo exit; exit' INT TERM  # and other signals
while true; do sleep 1; done
$bash trap
^Cexit
$dash trap
^Cexit
$zsh trap
^Cexit
$ksh trap
^Cexit
$mksh trap
^Cexit
$busybox sh trap
^Cexit

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读