質問

信号1を閉じ込めてみたいが失敗

#!/bin/bash
# capture an interrupt # 0
trap 'echo "Exit 0 signal detected..."' 0
trap 'echo "Exit 1 signal detected..."' SIGHUP

# display something
echo "This is a checkpoint 1"
exit 1

echo "This is checkpoint 2"
# exit shell script with 0 signal
exit 0

Output--
kithokit@15:02:55 trunk (master) $ ./test.sh 
This is a checkpoint 1
Exit 0 signal detected...
kithokit@15:03:44 trunk (master) $ 
.

終了しても、常にトラップ0に閉じ込め、どれがこれを解決する方法を知っていますか?

ありがとう

役に立ちましたか?

解決

exit 1はSIGHUPを送信しません。戻りコード(AKA出口ステータス)で終了します.1を送信するには、killを使用します。

#!/bin/bash
# capture an interrupt # 0
trap 'echo "Signal 0 detected..."' 0
trap 'echo "SIGHUP detected..."' SIGHUP

# display something
echo "This is a checkpoint 1"
kill -1 $$

echo "This is checkpoint 2"
# exit shell script with 0 signal
exit 0
.

$$は現在のプロセスのIDです。そのため、kill -1 $$は現在のプロセスにシグナル1(SIGHUP)を送信します。上記のスクリプトの出力は次のとおりです。

This is a checkpoint 1
SIGHUP detected...
This is checkpoint 2
Signal 0 detected...
.

出口

の戻りコードの確認方法

特別な信号をキャッチするのではなく戻りコード(出口ステータスとも呼ばれる)をチェックすることを目標がある場合は、終了時のステータス変数$?を確認するだけです。

#!/bin/bash
# capture an interrupt # 0
trap 'echo "EXIT detected with exit status $?"' EXIT

echo "This is checkpoint 1"
# exit shell script with 0 signal
exit "$1"
echo "This is checkpoint 2"
.

コマンドラインで実行すると、これは次のようになります。

$ status_catcher 5
This is checkpoint 1
EXIT detected with exit status 5
$ status_catcher 208
This is checkpoint 1
EXIT detected with exit status 208
.

TRAPステートメントは、異なる戻りコードを異なるように処理するための任意に複雑なステートメントを含む可能性があるBASH機能を呼び出すことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top