ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
マニュアルページセクション 1: ユーザーコマンド Oracle Solaris 11 Information Library (日本語) |
- (ハードウェア) シグナルに応答するためのシェル組み込み関数
trap [argument n [n2]...]
onintr [-| label]
*trap [arg sig [sig2...]]
+trap [-p] [action condition...]
argument が示す trap コマンドを、シェルが数値形式または 名前形式で指定されているシグナル(n) を受信した時に読み取り、実行します。(注: argument は、トラップ設定時とトラップ取り出し時に 1 度ずつ検索されます。)トラップコマンドは、シグナル番号または対応するシンボリック名の順序で実行されます。現在のシェルへの入力時に無視されたシグナルにトラップを 設定しようとしても無効となります。シグナル 11 ( メモリフォールト ) にトラップを指定しようとすると、エラーになります。argument を省略すると、 n のトラップはすべてその元の値に再設定されます。argument が NULL 文字列の場合、 シェルおよびシェルが呼び出すコマンドは、 このシグナルを無視します。n が 0 の場合、 argument が示すコマンドはシェル終了時に実行されます。引数なしの trap コマンドは、コマンドの一覧を各々が対応しているシグナル番号とともに表示します。
onintr は割り込み時のシェルの動作を制御します。引数を指定しないと、onintr はデフォルトの動作を復元します (すなわち、シェルはシェルスクリプトを終了して、端末のコマンド入力レベルに戻ります)。– 引数を指定すると、シェルはすべての割り込みを無視します。label 引数を指定すると、割り込みを受信するか割り込みのために子プロセスが終了したときに、シェルは goto label を実行します。
trap は arg を sig が示すシグナルをシェルが受信したときに読み取られ、実行されるコマンドとして使用します。arg は、トラップ設定時とトラップ取り出し時に 1 度ずつ検索されます。各 sig は、数値またはシグナルの名前です。trap コマンドは、シグナル番号の順序で実行されます。現在のシェルへの入力時に無視されたシグナルにトラップを 設定しようとしても無効となります。arg を省略するか、 または – と指定する場合、各 sig 用のトラップはすべてその元の値に再設定されます。arg が NULL 文字列 ("" などの空の文字列) の場合、シェルおよびシェルが呼び出すコマンドは、このシグナルを無視します。sig が ERR の場合は、コマンドが 0 以外の終了ステータスで終わると必ず arg が実行されます。sig が DEBUG の場合は、各コマンドのあとで arg が実行されます。sig が 0 または EXIT で、トラップが関数の外側で設定されている場合、シェルの終了時に arg が示すコマンドが実行されます。引数なしの trap コマンドは、コマンドの一覧を各々が対応しているシグナル番号とともに表示します。
このマニュアルページでは、1 つまたは 2 つのアスタリスク (*) が先頭に付加されている ksh88(1) コマンドは、次の方法で特殊な処理を受けます。
コマンドが完了しても、コマンドの直前の変数代入リストは依然として有効です。
入出力のリダイレクトは変数代入後に行われます。
エラーが発生すると、それを含むスクリプトは中止されます。
変数代入形式で、** から始まるコマンドに続くワードは、変数代入と同一の規則で展開されます。つまり、チルド置換は = 符号のあとに実行され、ワード分割とファイル名生成は実行されません。
trap は、シグナル受信などの状況が発生したときに行われるアクションを定義する特別な組み込みコマンドです。trap を使用すると、現在のトラップ設定を標準出力に表示することもできます。
action が - の場合、trap は各状況をデフォルト値にリセットします。action が空の文字列の場合は、各状況が発生してもシェルは無視します。それ以外の場合、引数 action は該当する状況のいずれかが発生したときに eval によって処理された場合と同様に、シェルによって読み取られ実行されます。トラップのアクションは、指定された各状況に関連付けられた以前のアクションよりも優先されます。値 $? はトラップの実行によって変更されません。
condition には、シグナルの名前または番号、あるいは次のいずれかを指定できます。
シェルの終了時に、このトラップを実行します。予約語 function を含む関数内に定義した場合は、関数が復帰するときに呼び出し元の環境でトラップを実行します。トラップのアクションは、関数の呼び出し時の値に復元されます。
EXIT と同じです。
各単純コマンドが実行される前 (ただし、引数が展開されたあと) に実行します。
set -e によりシェルが終了するたびに実行します。
端末装置からキー入力されたときに実行します。
シグナル名は大文字と小文字の区別がなく、sig 接頭辞はオプションです。非対話型シェルの開始時に無視されたシグナルは、トラップもリセットもできません。ただし、トラップやリセットを行なってもエラーは報告されません。1、2、3、6、9、14、15 以外のシグナル番号の使用は移植できません。
trap は特殊な組み込みコマンドですが、シェルが認識しない状況を指定すると、トラップがゼロ以外の終了ステータスで終了します。ただし、呼び出し側のシェルは終了しません。
アクションまたは状況を指定しない場合は、現在のトラップ設定がすべて標準出力に書き込まれます。
ksh の trap 組み込みコマンドでは、次のオプションがサポートされています。
現在のトラップを再作成できるように、現在のトラップがシェルへの入力として処理可能な形式で出力されます。
ksh の trap の組み込みコマンドは、次の値のいずれかで終了します。
正常終了。
エラーが発生しました。
このマニュアルページでは、1 つまたは 2 つの + (プラス符号) が先頭に付加されている ksh(1) コマンドは、次のような特殊な処理を受けます。
コマンドが完了しても、コマンドの直前の変数代入リストは依然として有効です。
入出力のリダイレクトは変数代入後に行われます。
エラーが発生すると、それを含むスクリプトは中止されます。
これらは有効な関数名ではありません。
変数代入形式で、++ を先頭に持つコマンドに続くワードは、変数代入と同一の規則で展開されます。つまり、チルド置換は = 符号のあとに実行され、ワード分割とファイル名生成は実行されません。
属性についての詳細は、attributes(5) を参照してください。
|
csh(1), eval(1), exit(1), ksh(1), ksh88(1), sh(1), attributes(5)