我想尝试诱捕信号1但失败

#!/bin/bash
# capture an interrupt # 0
trap 'echo "Exit 0 signal detected..."' 0
trap 'echo "Exit 1 signal detected..."' SIGHUP

# display something
echo "This is a checkpoint 1"
exit 1

echo "This is checkpoint 2"
# exit shell script with 0 signal
exit 0

Output--
kithokit@15:02:55 trunk (master) $ ./test.sh 
This is a checkpoint 1
Exit 0 signal detected...
kithokit@15:03:44 trunk (master) $ 
.

即使是退出1,它始终陷入陷阱0,任何一个人都知道如何解决这个问题?

感谢

有帮助吗?

解决方案

exit 1不发送稍微升级。它退出返回代码(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函数,该函数可以包括不同复杂的语句来处理不同的返回代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top