日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第 1 章:OpenVMS オペレーティング・システムの概要
第 2 章:DCL を使用したシステムとの会話
第 3 章:ファイル情報の格納
第 4 章:ディレクトリ・ファイルの編成
第 5 章:拡張ファイル指定
第 6 章:ディスクとテープ・ドライブの使用方法
第 7 章:Mail を使用して他のユーザと通信する
第 8 章:EVE エディタによるテキスト・ファイルの編集
第 9 章:ファイルのソートとマージ
第 10 章:資源へのアクセスの制御
第 11 章:デバイスとファイルの論理名定義
第 12 章:シンボル,コマンド,式の定義
第 13 章:コマンド・プロシージャの概要
第 14 章:DCL での拡張プログラミング
第 15 章:レキシカル関数を使用しての情報の取得と処理
第 16 章:プロセスとバッチ・ジョブ
付録 A :文字セット
付録 B :コマンド・プロシージャの例
用語集
索引
PDF
OpenVMS ホーム
OpenVMS

OpenVMS
ユーザーズ・マニュアル


目次 索引



コマンド・プロシージャが途中で打ち切られる場合でも,クリーンアップ操作が確実に実行されるようにするには,コマンド・プロシージャの各コマンド・レベルを次の文で開始します。

$ ON CONTROL_Y THEN GOTO CLEANUP 

ON CONTROL_Y コマンドの使用方法についての詳細は, 第 14 章 を参照してください。

13.5.7 手順 7: コマンド・プロシージャを完成する

全般的な設計が正しく動作している場合には,次の操作を実行してコマンド・プロシージャを完成します。

手順 操作
1 コマンド・プロシージャ内の最初のプログラム・スタブをコマンドに置き換える。
2 コマンド・プロシージャをテストして,新しいコマンドが正しく機能するかどうか確認する。
3 必要に応じて,コマンド・プロシージャをデバッグする。
4 最初のプログラム・スタブが正常に機能する場合には,次のスタブに移動する。すべてのプログラム・スタブが置換されるまで,この操作を続行する。

例: プログラム・スタブとコマンドの置換

次の例は,CLEANUP.COM の TYPE セクションのコードを示しています。

$! Execute if user entered TYPE 
$! TYPE: 
$      IF COMMAND .NES. "TYPE THEN GOTO ERROR 
$      INQUIRE FILE "File to type" 
$      TYPE 'FILE' 
$      GOTO GET_COM_LOOP 

既存のコードは次のように置き換えられます。

$ WRITE SYS$OUTPUT "This is the TYPE section." 

例: CLEANUP.COM コマンド・プロシージャ

次の例は,完成した CLEANUP.COM コマンド・プロシージャを示しています。

$ GET_COM_LOOP: 
$    INQUIRE COMMAND - 
     "Enter command (DELETE, DIRECTORY, EXIT, PRINT, PURGE, TYPE)" 
$    IF COMMAND .EQS. "EXIT" THEN GOTO END_LOOP 
$! 
$!Execute if user entered DELETE 
$ DELETE: 
$       IF COMMAND .NES. "DELETE" THEN GOTO DIRECTORY 
$       INQUIRE FILE "File to delete? " 
$       DELETE 'FILE' 
$       GOTO GET_COM_LOOP 
$! 
$!Execute if user entered DIRECTORY 
$ DIRECTORY: 
$       IF COMMAND .NES. "DIRECTORY" THEN GOTO PRINT 
$       DIRECTORY 
$       GOTO GET_COM_LOOP 
$! 
$!Execute if user entered PRINT 
$ PRINT: 
$       IF COMMAND .NES. "PRINT" THEN GOTO PURGE 
$       INQUIRE FILE "File to print? " 
$       PRINT SYS$OUTPUT 'FILE' 
$       GOTO GET_COM_LOOP 
$! 
$!Execute if user entered PURGE 
$ PURGE: 
$       IF COMMAND .NES. "PURGE" THEN GOTO TYPE 
$       PURGE 
$       GOTO GET_COM_LOOP 
$! 
$!Execute if user entered TYPE 
$ TYPE: 
$       IF COMMAND .NES. "TYPE" THEN GOTO ERROR 
$       INQUIRE FILE "File to type" 
$       TYPE 'FILE' 
$       GOTO GET_COM_LOOP 
$! 
$ ERROR: 
$       WRITE SYS$OUTPUT "You entered an invalid command." 
$       GOTO GET_COM_LOOP 
$! 
$ END_LOOP: 
$ WRITE SYS$OUTPUT "Directory ''F$DIRECTORY()' has been cleaned." 
$ 
$ EXIT 



13.6 コマンド・プロシージャの実行

コマンド・プロシージャを動作させるには,実行しなければなりません。コマンド・プロシージャは次の方法で実行できます。

  • 別のコマンド・プロシージャの内部から実行する方法

  • リモート・ノードで実行する方法

  • DCL コマンドにパラメータまたは修飾子として指定する方法

  • 会話形式で実行する方法

  • バッチ・ジョブとして実行する方法

  • ディスクおよびテープ・ボリューム上で実行する方法

この節では,これらの各方法について説明します。

13.6.1 他のコマンド・プロシージャの内部からのコマンド・プロシージャの実行

プロシージャ実行コマンド (@) を使用すれば,別のコマンド・プロシージャの内部からコマンド・プロシージャを実行できます。

次のコマンド・プロシージャ WRITEDATE.COM は,コマンド・プロシージャ GETDATE.COM を起動します。

$! WRITEDATE.COM 
$! 
$ INQUIRE TIME "What is the current time in hh:mm format?" 
$ @GETDATE [JONES.COM]GETDATE.COM 



13.6.2 リモート・ノードでのコマンド・プロシージャの実行

TYPE コマンドを使用すると,リモート・ノードの別のアカウントのトップ・レベル・ディレクトリでコマンド・プロシージャを実行できます。次の操作を実行するコマンド・プロシージャを実行できます。

  • ローカル OpenVMS Cluster のサービスのうち,クラスタ全体に提供されないサービスの状態を表示する。

  • リモート・ノードにログインしているユーザの一覧を表示する。

TYPE コマンドの後にアクセス制御文字列を入力します。次の形式を使用してください。

$ TYPE nodename"username password"::"TASK=command_procedure" 

username および password という変数は,リモート・ノードのアカウントのユーザ名とパスワードです。

このコマンド・プロシージャは,コマンド・プロシージャが存在するリモート・ノードにログインしているユーザを表示します。

$!SHOWUSERS.COM 
$! 
$ IF F$MODE() .EQS. "NETWORK" THEN DEFINE/USER SYS$OUTPUT SYS$NET 
$ SHOW USERS 

次の例では,SHOWUSERS.COM はノード ORIOLE の BIRD のアカウントのトップ・レベル・ディレクトリに格納されており,パスワードは BOULDER です。 SHOWUSERS.COM は,リモート・ノード ORIOLE で DCL コマンド SHOW USERS を実行します。 TYPE コマンドは,SHOWUSERS.COM からの出力をローカル・ノード,つまり type コマンドを入力したターミナルに表示します。

$ TYPE ORIOLE"BIRD BOULDER"::"TASK=SHOWUSERS" 
 
             OpenVMS User Processes at 11-DEC-1999 17:20:13.30 
    Total number of users = 4, number of processes = 4 
 
 Username     Node           Interactive  Subprocess   Batch 
 FLICKER      AUTOMA                 2         1 
 ROBIN        FABLES                 1         2        1 
 DOVE         MURMUR                 1 
 DUCK         FABLES                 1         1 



TYPE コマンドとアクセス制御文字列を入力すると,ターミナルにパスワードが表示されます。 第 16 章 の説明に従って,セキュリティに関する適切な予防措置をとってください。

13.6.3 DCL 修飾子またはパラメータを指定したコマンド・プロシージャの実行

DCL コマンドのパラメータまたは修飾子を指定するコマンド・プロシージャを作成できます。この種のコマンド・プロシージャは,1 つ以上のコマンドで特定のパラメータまたは修飾子の組み合わせを頻繁に使用するときに便利です。

コマンド行で修飾子やパラメータを指定する場所に,プロシージャ実行コマンド (@) を入力することができます。

このコマンド・プロシージャを使用すると, LINK コマンドに対する修飾子を入力できます。

$! This command procedure contains command 
$! qualifiers for the LINK command. 
$! 
/DEBUG/SYMBOL_TABLE/MAP/FULL/CROSS_REFERENCE 

このコマンド行は,DEFLINK.COM に指定された修飾子を使用して, SYNAPSE.OBJ という名前のオブジェクトをリンクします。

$ LINK SYNAPSE@DEFLINK 

このコマンド・プロシージャは,DCL コマンドに対するパラメータ CHAP1.TXT, CHAP2.TXT,CHAP3.TXT を入力するために使用できます。

$! PARAM.COM 
$! This command procedure contains a list of 
$! parameters that can be used with commands. 
$! 
CHAP1, CHAP2, CHAP3 

このコマンド行は,パラメータ・リストのかわりにコマンド・プロシージャ PARAM を指定します。次の例では,パラメータは PARAM.COM に指定されているファイル名です。

$ DIRECTORY/SIZE @PARAM 

  注意
実行プロシージャ・コマンド (@)を実行すると,指定したファイル全体がDCLのコマンド入力先とされます。



コマンド・プロシージャを実行する場合には,次の制限事項があります。

  • コマンド・プロシージャの先頭に修飾子名が指定されている場合には,プロシージャ実行コマンド (@) の前にスペースを指定できない。

  • コマンド・プロシージャの先頭にパラメータが指定されている場合には,プロシージャ実行コマンド (@) の前にスペースを指定できない。



13.6.4 会話形式でのコマンド・プロシージャの実行

会話形式でコマンド・プロシージャを実行するには,コマンド・プロシージャ名の前にプロシージャ実行コマンド (@) タイプして入力します。

このコマンドは,WORKDISK: ディスクの [MAINT.PROCEDURES] ディレクトリのプロシージャ SETD.COM を実行します。

$ @WORKDISK:[MAINT.PROCEDURES]SETD [Return]

長いコマンド行を表すためにシンボル名を定義できます。定義したシンボルを使用して,コマンド・プロシージャを実行できます。

シンボルを使用して上記例のコマンド・プロシージャを実行するには,ログイン・コマンド・プロシージャに次のコマンド行を指定しておきます。

$ SETD == "@WORKDISK:[MAINT.PROCEDURES]SETD" 

ログイン後,次のようにシンボル名を入力すれば, SETD.COM プロシージャを実行することができます。

$ SETD [Return]

省略時の設定では,コマンド・プロシージャを会話形式で実行する場合,オペレーティング・システムは出力をターミナルに表示します。しかし,実行コマンドに対して /OUTPUT 修飾子を指定すれば,出力をファイルにリダイレクトできます。

コマンド・プロシージャの出力をファイルにリダイレクトする場合には,プロシージャはエラー・メッセージをターミナルに送信し,さらに,出力を受信しているファイルにもエラー・メッセージを送信します。

このコマンド・プロシージャは,SETD.COM からの出力を,ターミナルではなく,ファイル RESULTS.TXT に書き込みます。

$ @SETD/OUTPUT=RESULTS.TXT 

/OUTPUT 修飾子は,コマンド・プロシージャ名のすぐ後に指定しなければならず,修飾子とプロシージャ名の間にスペースを指定することはできません。この制限事項が守られないと,DCL は修飾子を,プロシージャに渡すパラメータとして解釈します。

13.6.5 バッチ・ジョブとしてのコマンド・プロシージャの実行

長い処理時間を必要とするコマンド・プロシージャを使用する場合 (たとえば,大きいプログラムをコンパイルしたりアセンブルする場合) には,これらのプロシージャをバッチ・ジョブとして実行すれば,ターミナルを引き続き会話形式で使用することができます。

コマンド・プロシージャをバッチ・モードで実行するには, DCL コマンド SUBMIT を入力して,コマンド・プロシージャをバッチ・キュー ( 実行を待っているバッチ・ジョブのリスト ) に登録します。ジョブをキューに登録すると,ジョブは省略時のバッチ・ジョブ SYS$BATCH に登録され,実行を待っているジョブのキューの最後に追加されます。前に登録されていたジョブが終了すると,新たに登録したジョブが実行されます。 OpenVMS システムでは,同時に実行できるバッチ・ジョブの数は,システム管理者がバッチ・ジョブを作成するときに指定します。

次の例では,JOB1.COMという名前のコマンド・プロシージャの実行方法を示しています。SUBMIT コマンドは省略時のファイル・タイプ .COM を使用します。したがって,コマンド・プロシージャのファイル・タイプが .COM である場合には,ファイル・タイプを入力する必要はありません。

$ SUBMIT JOB1 
Job JOB1 (queue SYS$BATCH, entry 651, started on SYS$BATCH)) 



システムがネットワークの一部として接続されている場合には,コマンド・プロシージャをリモート・ノードにバッチ・ジョブとして登録できます。このようにして使用するコマンド・プロシージャでは,ローカル・ファイルの場合と同じコマンドおよび修飾子を使用して,リモート・ノードのファイルを開いたり,閉じたりする DCL コマンドや,これらのファイルのレコードを読み込んだり,書き込むコマンドを使用できます。

省略時の設定では,ジョブが終了するためにシステムに障害が発生した場合には,バッチ・ジョブは最初の行から再実行されます。しかし,コマンド・プロシージャで次のシンボルを使用すれば,別の場所から再起動することを指定できます。

  • $RESTART
    これはグローバル・シンボルであり,今回の実行の前に少なくとも 1 回以上,バッチ・ジョブが起動されていた場合には,このシンボルの値は真になる。 $RESTART の値を指定してはならない。システムが適切な値を割り当てる。

  • BATCH$RESTART
    これはグローバル・シンボルであり,シンボルの値は,SET RESTART_VALUE コマンドを使用して指定できる。

$RESTART と BATCH$RESTART の使用

次の操作手順は,$RESTART シンボルと BATCH$RESTART シンボルの使用方法を示しています。

手順 操作
1 プロシージャの可能な各開始点の先頭にラベルを指定する。
2 各セクションの最初の処理として, SET RESTART_VALUE コマンドを使用して, BATCH$RESTART の値をラベルに等しく設定する。
3 プロシージャを開始するときに $RESTART をテストする。
4 $RESTART が真の場合には, BATCH$RESTART を分岐先ラベルとして使用して,GOTO 文を実行する。

このコマンド・プロシージャは,ライブラリから多くのモジュールを取り出し,それらのモジュールを連結し,作成されたファイルをソートします。

$! SORT_MODULES.COM 
! 
$! Set default to the directory containing 
$! the library whose modules are to be sorted 
$ SET DEFAULT WORKDISK:[ACCOUNTS.DATA83] 
$! 
$! Check for restarting 
$ IF $RESTART THEN GOTO "BATCH$RESTART" 
$! 
$ EXTRACT_LIBRARIES: 
$ SET RESTART_VALUE=EXTRACT_LIBRARIES 
   .
   .
   .
$ CONCATENATE_LIBRARIES: 
$ SET RESTART_VALUE=CONCATENATE_LIBRARIES 
   .
   .
   .
$ SORT_FILE: 
$ SET RESTART_VALUE=SORT_FILE 
   .
   .
   .
$ EXIT 

このコマンド・プロシージャが途中で打ち切られた場合には, BATCH$RESTART の値に応じて,ファイルの先頭から再実行されるか, CONCATENATE_LIBRARIES というラベルの付いた文から再実行されるか, SORT_FILE というラベルの付いた文から再実行されます。多くの独立したモジュールを取り出しているため,各抽出操作は別々のセクションにすることができます。

13.6.6 ディスクおよびテープ・ボリュームでのコマンド・プロシージャの実行

これ以降の節では,ディスクおよびテープ・ボリューム上でコマンド・プロシージャを実行する方法を説明します。

SUBMIT コマンドを使用してコマンド・プロシージャをキューに登録する場合には,割り当てられているデバイス上のファイルにアクセスすることができません。しかし,/SHARE 修飾子を使用してマウントされている個人用ディスクに存在するコマンド・プロシージャは実行できます。

次の場合には,テープ・ボリュームに存在するコマンド・プロシージャを実行できます。

  • プロシージャで他のプロシージャを起動しない場合。

  • プロシージャで,GOTO コマンドの前に指定されているラベルを参照する GOTO コマンドを実行しない場合。

上記のいずれかの条件が満足される場合には,次の操作により,コマンド・プロシージャを実行できます。

手順 操作
1. コマンド・プロシージャを共用ディスク・ボリュームにコピーする。
2. コマンド・プロシージャを共用ディスク・ボリュームで実行する。



13.7 コマンド・プロシージャの終了と割り込み

この節で説明する方法を使用してコマンド・プロシージャを終了する場合には,コマンド・レベルについて理解しておかなければなりません。

コマンド・レベルとは,DCL レベル・インタプリタの入力ストリームです。ターミナルからコマンドを入力する場合には,コマンドはコマンド・レベル 0 で入力されます。単純な会話形式のコマンド・プロシージャ (CLEANUP.COM など) は,コマンド・レベル 1 で実行されます。プロシージャが終了し,DCL プロンプトが画面に再表示されると,コマンド・レベル 0 に戻ります。


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.