trap - 異常条件および割り込みをインターセプトする

形式

trap ['handler'] [event …]

説明

trap は、ある種類の例外条件をインターセプトします。 どのシグナルも、シグナル番号に対応するイベントを指定することで、インターセプトできます。

ERR のイベントが起きると、trap は、ゼロ以外の 終了状況を受け取った後、ハンドラーを起動します。これの例外は、ifwhile、および until ステートメントの中 の条件です。このトラップは、関数内で継承されません。

トラップ番号 0 または EXIT により、trap は、シェルの終了中にハンドラーを起動します。関数内では 、関数の終了中に起動されます。

他のすべてのイベントは、シグナル番号またはシグナル名に対応します (有効なシグナル番号とその名前の一覧については 、kill を参照してください)。シェルに入るときに シグナルが無視されている場合、シェルはどのトラップ とも関係なくそのシグナルを無視し続けます。

システム初期化によって、SIGIOERR シグナルの値は ignore に 設定されるので、この シグナルを trap で設定することはできません。

handler 引数はコマンド・リストです。通常、複数のワードであるため、引用符で囲んで単一の引数に見えるようにする 必要があります。コマンド・リストは、トラップ関数が最初に起動されたときに走査されま す。トラップ条件が発生すると、シェルは再びコマンド・リストを走査して、コマンドを実行します。引数が欠落しているか、または - (ダッシュ) 引数があると、デフォルトのトラップ条件はリセットされます。 ヌル引数 ('') があると、トラップ条件は無視されます。

引数がまったくない場合、trap は、すべてのトラップおよびコマンド を出力します。

使用上の注意

trap は特殊組み込みシェル・コマンドです。

  1. この例では、エラーまたは終了で、コマンド実行中に作成された一時ファイルを削除します。
    trap 'rm –f /tmp/xyz$$; exit' ERR EXIT
    次の例では、割り込みシグナルを受け取ると、打ち切るかどうかのプロンプトを出し、応答が y の場合、終了します。
    trap 'read REPLY?"ABORT??"
            case $REPLY in
            y)      exit 1;;
            esac'   2
  2. この例では、シェルのヒストリー・ファイル (HISTFILE 環境変数の値によって 指定される) をタイムアウトになる前に保管します。これは、再びログオンしたときに、ヒストリー・ファイルを復元できるようにするためです。
    trap 'cp $HISTFILE $HOME/old_hist.bak; exit' ALRM

ローカライズ

trap は、以下のローカライズ環境変数を使用します。
  • LANG
  • LC_ALL
  • LC_MESSAGES
  • NLSPATH

詳しくは、ローカライズを参照してください。

終了値

0
正常終了
1
以下のいずれかによる失敗。
  • シグナル名の誤り
  • シグナル番号の誤り
2
コマンド行の引数が正しくない

メッセージ

以下の エラー・メッセージが出される可能性があります。
name not a valid trap name
認識されないトラップ名を指定しました。このエラーの一般的な原因は、コマンド行での入力間違いです。

移植性

POSIX.2, X/Open 移植性ガイドX/Open 移植性ガイド.

関連情報

sh