我正在开发一个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)退出代码,我应该知道什么吗?
答案 0 :(得分:5)
trap
发送进程接收的信号(例如,来自kill
),而不是退出代码,其中陷阱... 0被保留用于进程结束。 trap /blah/blah 0
会在exit 0
或exit 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"