2010-01-08 81 views
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)退出代码?

回答

5

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

0

您还可以使用||运算符,用||表示b,b在失败时执行

#!/bin/sh 

failed 
{ 
    echo "Failed $*" 
    exit 1 
} 

dosomething arg1 || failed "some comments" 
2

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

除了系统信号,您可以通过执行trap -l进行列表,您可以使用一些特殊的Bash sigspecs:ERR,EXIT,RETURN和DEBUG。在所有情况下,您都应该使用信号的名称而不是数字来提高可读性。