Kit*_* Ho 4 shell signals exit-code bash-trap
我想尝试捕获信号 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) $
Run Code Online (Sandbox Code Playgroud)
即使是退出1,它总是陷入陷阱0,有人知道如何解决这个问题吗?
谢谢
exit 1不发送 SIGHUP。它退出并返回代码(也称为退出状态) 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
Run Code Online (Sandbox Code Playgroud)
$$是当前进程的ID。因此,kill -1 $$向当前进程发送信号 1 (SIGHUP)。上述脚本的输出是:
This is a checkpoint 1
SIGHUP detected...
This is checkpoint 2
Signal 0 detected...
Run Code Online (Sandbox Code Playgroud)
如果目标是检查返回代码(也称为退出状态)而不是捕获特殊信号,那么我们需要做的就是检查$?退出时的状态变量:
#!/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"
Run Code Online (Sandbox Code Playgroud)
当在命令行运行时,会产生:
$ 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
Run Code Online (Sandbox Code Playgroud)
请注意,trap 语句可以调用 bash 函数,该函数可以包含任意复杂的语句来以不同的方式处理不同的返回代码。
| 归档时间: |
|
| 查看次数: |
16049 次 |
| 最近记录: |