私のスクリプトは次のとおりです
trap "$(pwd)/dd-destroy.sh $l-env;$(pwd)/dd-drop.sh $l-db;exit" INT QUIT TERM EXIT
./dd-all.sh $l $l-db $l-env || exit 1
app_ip=$(./dd-status.sh ip $l-env|grep docker-app|awk '{print $3}')
url=http://$app_ip:8080/app/
wget -O /dev/null $url || (echo "access $url failed" && false) || exit 1
「exit 1」(ここで変更できます)エラーが発生した場合は、このトラップを開始したいと思います。しかし、何も起こらないと、dd-all.shはうまくいき、wgetはうまくいきます。私は破壊を要求したくありません。
これを行うためにトラップを使用できますか?これは私のスクリプトではないので、少し変更する必要があります。ここでトラップが間違った選択ではないでしょうか?
答え1
先頭を変更して、trap
最後のコマンドの戻りコード(終了の戻りコードまたはスクリプトの最後のコマンド)がゼロであることを確認してください。つまり
trap '[ $? = 0 ] && exit;'"..."
現在の文字列はどこに"..."
ありますか?その後にスペースがあってはいけません。トラップから抜け出すと、トラップに落ちるのを防ぐことができます。
トラップがSIGINT(control-C)などの信号も処理する場合、トラップはSIGINTに対して一度呼び出され、終了するために再度呼び出されます。トラップが SIGINT から呼び出されることを確認できます。$?
128+nになります。ここで、nは信号なので、SIGINTは130です。$?
他のコマンドを実行すると変更が発生するため、そのコマンドで開始してテストに使用できますrc=$?;
。$rc