Joe*_*Joe 6 shell signals posix trap
我有一个在 Bash 中编写的脚本,我正在尝试将其修改为符合 POSIX 标准。我已经设法让一切正常工作,除了当进程以 killall、CTRL+C 或关闭终端终止时,我无法触发 EXIT 陷阱 - 就像在 Bash 中所做的那样。这是我的退出陷阱:
#!/bin/sh
TMP=$(mktemp /tmp/countdown.XXXXX)
trap 'rm -rf $TMP' EXIT
Run Code Online (Sandbox Code Playgroud)
在严格的 POSIX shell 中,在EXIT
shell 由于执行exit
或执行脚本中的最后一个命令而退出之前,会评估陷阱。如果 shell 由于信号而退出,则不会执行它。
你想 catch Ctrl+C,你就必须捕获INT
(“中断”信号)。如果关闭终端向脚本发送HUP
(“挂断”)信号,您也必须捕获它。
trap 'rm -rf "$TMP"; trap - EXIT; exit' EXIT INT HUP
Run Code Online (Sandbox Code Playgroud)
您可能还想捕获TERM
默认情况下发送的通用“终止”信号kill
。
上面的陷阱明确地重置了EXIT
陷阱,以便在脚本由于接收到列出的信号之一而退出时不会再次调用它。