3

私はシェルスクリプトに取り組んでおり、遭遇する可能性のあるさまざまな終了コードを処理したいと考えています。試してみるために、私は次のスクリプトを使用しています。

#!/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プロセスが受信するシグナル(たとえば、から)でディスパッチします。kill終了コードではなく、トラップ...0がプロセスの終了用に予約されています。 またはのいずれかtrap /blah/blah 0に発送しますexit 0exit 1

于 2010-01-08T09:18:22.320 に答える
2

これは単なる終了コードであり、HUPを意味するものではありません。だからあなたtrap ... 1はHUPを探していますが、出口はただの出口です。

を実行して一覧表示できるシステム信号に加えて、trap -lいくつかの特別なBash sigspecs(ERR、EXIT、RETURN、およびDEBUG)を使用できます。いずれの場合も、読みやすくするために、番号ではなく信号の名前を使用する必要があります。

于 2010-01-08T12:55:56.360 に答える
0

||も使用できます 演算子、|| b、bは失敗したときに実行されます

#!/bin/sh

failed
{
    echo "Failed $*"
    exit 1
}

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