前のコマンドがゼロ以外の値を返した後にスクリプトが中断される前に1つ以上のコマンドを実行させるにはどうすればよいですか?

前のコマンドがゼロ以外の値を返した後にスクリプトが中断される前に1つ以上のコマンドを実行させるにはどうすればよいですか?

いくつかのファイル処理を実行するためにPerlスクリプトを呼び出すシェルスクリプトがあります。 Perlスクリプトは0または1の値で終了します。set -ePerl スクリプトが値 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 コマンドの構文は次のとおりです。

if test-commands; then
  consequent-commands;
[elif more-test-commands; then
  more-consequents;]
[else alternate-consequents;]
  fi

テストコマンドリストを実行し、戻り状態が 0 の場合、後続のコマンドリストを実行します。 "else alter-consequents"があり、最後のifまたはelif句の最後のコマンドにゼロ以外の終了状態がある場合、代替結果が実行されます。

また見なさい:非公式のBash厳格モードを使用する(デバッグが好きでない限り)

関連情報