web-dev-qa-db-ja.com

EXITがプログラムの正常終了後か、エラーなどの時期尚早であるかを `trap`に知らせる方法

問題:

私が書いているシェルプログラムがありますが、trapが最後にクリーンアップのためにトラップされていることを確認する方法がわかりません。または、コマンドのエラーのために、どちらの方法でもクリーンアップします。

ここにコードがあります:

################################### Successful exit then this cleanup ###########################################################3

successfulExit()
{
    IFS=$IFS_OLD
    cd "$HOME" || { echo "cd $HOME failed"; exit 155; }
    rm -rf /tmp/svaka || { echo "Failed to remove the install directory!!!!!!!!"; exit 155; }
}
###############################################################################################################################33
####### Catch the program on successful exit and cleanup
trap successfulExit EXIT

質問:

プログラムの終了時にtrapのみtrap EXITを作成するにはどうすればよいですか?

これが完全なスクリプトです:

debianConfigAwsome.5.3.sh

5

EXITトラップに入ると、$?には終了ステータスが含まれます。これは、別のシェルでこのスクリプトを呼び出した後、$?と同じ値です。引数がexitに渡されるか(0〜255の範囲に切り捨てられます)、前のコマンドのステータスが返されます。 。 set -eによる終了の場合、暗黙のexitをトリガーしたのはコマンドの戻りステータスです。

通常は、$?を保存して、同じステータスで再度終了する必要があります。

cleanup () {
  if [ -n "$1" ]; then
    echo "Aborted by $1"
  Elif [ $status -ne 0 ]; then
    echo "Failure (status $status)"
  else
    echo "Success"
  fi
}
trap 'status=$?; cleanup; exit $status' EXIT
trap 'trap - HUP; cleanup SIGHUP; kill -HUP $$' HUP
trap 'trap - INT; cleanup SIGINT; kill -INT $$' INT
trap 'trap - TERM; cleanup SIGTERM; kill -TERM $$' TERM