exit 1
不发送 SIGHUP。它以返回码退出(AKA 退出状态) 1. 要发送 SIGHUP,请使用kill
:
#!/bin/bash
# capture an interrupt # 0
trap 'echo "Signal 0 detected..."' 0
trap 'echo "SIGHUP detected..."' SIGHUP
# display something
echo "This is a checkpoint 1"
kill -1 $$
echo "This is checkpoint 2"
# exit shell script with 0 signal
exit 0
$$
是当前进程的ID。因此,kill -1 $$
将信号 1 (SIGHUP) 发送到当前进程。上述脚本的输出是:
This is a checkpoint 1
SIGHUP detected...
This is checkpoint 2
Signal 0 detected...
如何在退出时检查返回码
如果目标是检查返回码(也称为退出状态)而不是捕获特殊信号,那么我们需要做的就是检查$?
退出时的状态变量:
#!/bin/bash
# capture an interrupt # 0
trap 'echo "EXIT detected with exit status $?"' EXIT
echo "This is checkpoint 1"
# exit shell script with 0 signal
exit "$1"
echo "This is checkpoint 2"
在命令行运行时,会产生:
$ status_catcher 5
This is checkpoint 1
EXIT detected with exit status 5
$ status_catcher 208
This is checkpoint 1
EXIT detected with exit status 208
请注意,trap 语句可以调用 bash 函数,该函数可以包含任意复杂的语句,以不同方式处理不同的返回码。