3

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

4

3 回答 3

5

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

于 2010-01-08T09:18:22.320 回答
2

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

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

于 2010-01-08T12:55:56.360 回答
0

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

#!/bin/sh

failed
{
    echo "Failed $*"
    exit 1
}

dosomething arg1 || failed "some comments"
于 2010-01-08T10:05:53.113 回答