Yash マニュアル: trap 組込みコマンド
Author: magicant
Description: Yash の trap 組込みコマンドについて

# Trap 組込みコマンド

Trap 組込みコマンドはシェルがシグナルを受信したときの動作を設定します。

## 構文

- `trap`
- `trap 動作 シグナル…`
- `trap シグナル番号 シグナル…`
- `trap -p [シグナル…]`

## 説明

Trap コマンドはシェルプロセスがシグナルを受信したときの動作 (トラップ) を表示または設定します。

オペランドに動作とシグナルを指定して trap コマンドを実行すると、シェルがシグナルを受信した際に指定した動作を行うようになります。最初のオペランドがシグナル番号の場合、それと残りのシグナルに対する動作は、動作として `-` が指定されたときと同様に標準の動作に設定されます。

`-p` (`--print`) オプションを指定した場合またはオペランドを一つも指定していない場合は、trap コマンドは現在のトラップの設定状況をコマンドとして解釈可能な形式で標準出力に出力します。シグナルが与えられているときはそのシグナルに関する設定を、与えられてないときは全ての設定を出力します。

## オプション

`-p`, `--print`
  現在のトラップの設定を表示します。

## オペランド

動作
  シグナルを受信した際の動作を指定します。動作がハイフン一つ (`-`) ならば、シェルはシステムで規定された標準の動作を行います。動作が空文字列ならば、シェルはシグナルを無視します。それ以外の値を指定すると、シェルはこのオペランドをコマンドとみなして、シグナル受信時にこれを解釈・実行します (コマンドの実行中にシグナルを受信したときは、コマンドが終了した後にトラップを実行します)。
シグナル
  動作の対象となるシグナルです。シグナルはシグナル番号とシグナル名のどちらかで指定します。
  シグナルとして `0` または `EXIT` を指定すると、これはシェルの終了時に発生する仮想のシグナルを指定しているとみなします。この仮想のシグナルに対して設定された動作は、シェルが正常終了する直前に実行されます。

## 終了ステータス

トラップが正しく設定または表示されたときは終了ステータスは 0 です。エラーがあると終了ステータスは非 0 です。

## 補足

Trap コマンドは特殊組込みコマンドです。

POSIX は、シグナル名は `INT` や `QUIT` のように最初の SIG を除いた形で指定しなければならないと規定しています。非 POSIX 準拠モードの yash では、拡張として SIG を付けた形でも指定できますし、シグナル名の大文字と小文字を区別しません。