Shell 陷阱外壳退出代码

Shell 陷阱外壳退出代码,shell,signals,exit-code,shell-trap,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\";

我正在编写一个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)退出代码,我应该知道些什么吗?

trap
根据进程接收到的信号(例如,从
kill
发送,而不是根据退出代码发送,带有陷阱。。。0被保留用于进程结束
trap/blah/blah 0
将在
exit 0
exit 1
上调度。您也可以使用| |操作符,在a失败时执行| | b

#!/bin/sh

failed
{
    echo "Failed $*"
    exit 1
}

dosomething arg1 || failed "some comments"

这只是一个退出密码,并不意味着HUP。所以你的
陷阱。。。1
正在寻找HUP,但出口只是一个出口

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