捕获shell退出代码

时间:2010-01-08 09:11:50

标签: shell signals exit-code shell-trap

我正在开发一个shell脚本,并希望处理我可能遇到的各种退出代码。为了尝试,我使用这个脚本:

#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 1
exit 1;

我想我错过了一些东西,但似乎我无法陷入自己的“退出1”。如果我试图捕获0,一切都会成功:

#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 0
exit

关于捕获HUP(1)退出代码,我应该知道什么吗?

3 个答案:

答案 0 :(得分:5)

trap发送进程接收的信号(例如,来自kill),而不是退出代码,其中陷阱... 0被保留用于进程结束。 trap /blah/blah 0会在exit 0exit 1

上发送

答案 1 :(得分:2)

这只是退出代码,并不代表HUP。所以你的trap ... 1正在寻找HUP,但退出只是一个退出。

除了可以通过trap -l列出的系统信号之外,您还可以使用一些特殊的Bash sigspec:ERR,EXIT,RETURN和DEBUG。在所有情况下,您应该使用信号的名称而不是数字的可读性。

答案 2 :(得分:0)

您也可以使用||运算符,带|| b,b在失败时执行

#!/bin/sh

failed
{
    echo "Failed $*"
    exit 1
}

dosomething arg1 || failed "some comments"