コマンド・プロシージャの実行中,コマンド・インタプリタは,実行される各コマンドまたはプログラムから返される条件コードをチェックします。 ON コマンドを使用すると,コマンド・インタプリタがチェックの結果に基づいて行うべき手順を確立できます。
システムは,条件コードをグローバル・シンボル $STATUS に入れます。条件コードの重大度は,$STATUS の下位 3 ビットで表されます。この重大度は,グローバル・シンボル $SEVERITY でも表されます。重大度の値についての詳細は,EXIT コマンドの説明を参照してください。
ON コマンドの動作がエラーの重大度を指定する場合,コマンド・インタプリタは,指定された重大度以上のレベルで,エラーに対する ON コマンドの動作を実行します。たとえば,次のコマンドは,警告,エラー,または重大エラーの発生時に,プロシージャを終了させます。
省略時の動作は,次のとおりです。
つまり,コマンド・インタプリタは,警告の発生時は続行し,エラーまたは重大エラーの発生時は EXIT コマンドを実行します。重大度を指定する ON コマンド動作は,一度だけ実行されます。 ON コマンド動作が行われると,省略時の ON 動作が再設定されます。省略時の ON 動作には,例外があります。 CALL,GOSUB,または GOTO コマンドを使用して現在のコマンド・プロシージャに存在しないラベルを指定すると,コマンド・プロシージャは警告メッセージを出して終了します。
ON コマンドで指定された動作は,コマンドが実行されるコマンド・プロシージャ内だけに適用されます。したがって,別のプロシージャを呼び出すプロシージャで ON コマンドを実行する場合, ON コマンド動作はネストしたプロシージャには適用されません。どのコマンド・プロシージャ・レベルで実行される ON コマンドも,別のレベルのプロシージャのエラー状態処理には影響しません。
ON コマンドでエラー・チェックを禁止するには,SET NOON コマンドを使用します。エラー・チェックを許可するには,SET ON コマンドを使用するか, ON コマンドを入力します。
ON コマンドには,コマンド・プロシージャの実行中に発生する Ctrl/Y 割り込み用のアクション・ルーチンを定義する方法も提供されています。省略時の Ctrl/Y の動作では, Ctrl/Y コマンド・レベルでコマンド入力を求めるプロンプトが表示されます。 Ctrl/Y コマンド・レベルは,DCLコマンドを入力できる特殊なコマンド・レベルです。コマンド・インタプリタ内で実行されるコマンドを入力する場合は, CONTINUE コマンドでプロシージャの実行を再開できます。コマンド・インタプリタ内で実行されるコマンドの一覧については,『OpenVMS ユーザーズ・マニュアル』を参照してください。
他の DCL コマンドを入力すると,コマンド・インタプリタは,コマンド・レベル 0 に戻り,コマンドで起動されるイメージを実行します。終了ハンドラを含むイメージの実行中にコマンド・プロシージャに割り込みをかけると,新しいコマンド (イメージ) を実行する前に終了ハンドラを実行できます。ただし,Ctrl/Y を押してコマンド・プロシージャに割り込みをかけてから STOP コマンドを入力すると,割り込まれたイメージで宣言された終了ハンドラは実行されません。
ON コマンドを使用すると,Ctrl/Y割り込みの省略時の動作を変更できます。 Ctrl/Y 動作の省略時の動作を変更した場合, Ctrl/Y 割り込みの実行は,自動的には Ctrl/Y 動作の省略時に再設定されません。 Ctrl/Y動作は,次のいずれかが起きるまで有効です。
- プロシージャが終了する (EXIT コマンドまたは STOP コマンドの結果,または省略時のエラー状態処理動作の結果)。
- 別の ON CONTROL_Y コマンドを実行する。
- プロシージャが,SET NOCONTROL=Y コマンドを実行する。
Ctrl/Y 動作は,アクティブなコマンド・レベルごとに指定できます。現在実行中のコマンド・レベルに指定された Ctrl/Y 動作で,前のレベルに指定された動作が上書きされます。
| 注意
ON CONTROL_Y コマンドおよび SET NOCONTROL=Y コマンドは,特殊なアプリケーション用のコマンドです。一般に,Ctrl/Y 割り込みは,禁止にしないでください。たとえば,Ctrl/Y 割り込みを禁止にするプロシージャが制御不能ループに入ると,端末からプロシージャを停止させることができなくなります。
|