いくつかのファイル処理を実行するためにPerlスクリプトを呼び出すシェルスクリプトがあります。 Perlスクリプトは0または1の値で終了します。set -e
Perl スクリプトが値 1 で終了すると、スクリプトを中断するためにスクリプトの先頭に Unix コマンドがあります。 UnixにPerlスクリプトが値で終了した場合、スクリプトが中断される前にコマンドを実行するコマンドがあるかどうか疑問に思います。本質的に、私はスクリプトがPerlスクリプトが正常に実行されたかどうかを知らせる電子メールを私に送信したいと思います。私のコードは次のようになります。
#!/bin/bash
set -e
function email_success {
#Some code for the email
}
function email_fail {
#Some code for the email
}
usr/bin/perl perlscript.pl
if [$? -eq 0]; then
email_success
else
email_fail
fi
#More commands to be executed if its successful
答え1
set -e
失敗したブランチにシャットダウンを使用して追加しないでくださいif
。スクリプトの残りの部分にその動作が含まれるようにするには、set -e
電子メールの呼び出し後に追加してください。
答え2
使用set -e
書くことができます:
#!/bin/bash
set -e
# function email_success {...}
# function email_fail { ... }
if /usr/bin/perl perlscript.pl; then
email_success
else
email_fail
exit 1
fi
#More commands to be executed if its successful
説明する:
バッシュリファレンスマニュアル説明する:
-e
パイプライン(単一の単純なコマンドで構成できます)がゼロ以外の状態を返す場合は、すぐに終了してください。シェル終了しないでください失敗したコマンドがステートメントテストの一部である場合if
。
if コマンドの構文は次のとおりです。
if test-commands; then consequent-commands; [elif more-test-commands; then more-consequents;] [else alternate-consequents;] fi
テストコマンドリストを実行し、戻り状態が 0 の場合、後続のコマンドリストを実行します。 "else alter-consequents"があり、最後のifまたはelif句の最後のコマンドにゼロ以外の終了状態がある場合、代替結果が実行されます。