S-JIS[2022-08-15] 変更履歴

trap コマンド シグナル

trapは、シグナル発生時に実行するコマンドを登録・解除する。


概要

trap 〔コマンド〕 シグナル…

trapは、Javaのtry〜catch〜finallyのようなもの。
すなわち、シェル内でシグナルが発生したときに実行するコマンドを登録する(catch相当)。
シグナルにEXITを指定すると、シェル終了時に実行するコマンドを登録できる(finally相当)。

シグナルには「kill -l」で表示されるシグナル(強制終了であるKILLを除く)を指定できる。
シグナルは複数指定可能。

trapの引数にコマンドを指定しないと、トラップ解除になる。
EXITを解除しないと、シェルの末尾まで実行して正常終了する際にも、登録されたコマンドが実行される。

#!/bin/bash

function finally() {
  echo finally
}

echo start

trap finally EXIT 	# 終了時にfinally関数を呼ぶ

ls /tmptmp
if [ $? != 0 ]; then
  echo error
  exit 1 	# ここでfinally関数が呼ばれる
fi

trap EXIT 	# 終了時トラップを解除

echo end

set -eによって、各コマンドの戻り値が0以外でシェル全体が終了する場合でも、「trap コマンド EXIT」によって指定されたコマンドが実行される。


「trap コマンド EXIT」によって指定されたコマンド(関数)内に「exit 終了コード」がある場合、シェル全体はその終了コードで終了する。
exitが無い場合は、コマンドが呼ばれる前の終了コードがそのまま返される。

#!/bin/bash

trap finally EXIT 	# 終了時にfinally関数を呼ぶ

function finally() {
  echo finally
  exit 99
}

exit 123

UNIXコマンドへ戻る
メールの送信先:ひしだま