日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
OpenVMS
|
目次 | 索引 |
11.13.1 会話型とバッチ処理の間の等価名の相違点 |
システムを会話型で使用する場合には,DCLが SYS$INPUT,SYS$OUTPUT, SYS$ERROR,SYS$COMMAND を使用するターミナルに等しいと定義します。ただし,コマンド・プロシージャを実行してバッチ・ジョブを発行すると, DCLはこれらの論理名に対して新しい等価文字列を作成します。
コマンド・プロシージャを会話型で実行すると,次の状況が生じます。
バッチ・ジョブを発行すると,次の状況が生じます。
コマンド・プロシージャをネストすると ( つまり,他のコマンド・プロシージャを実行するコマンド・プロシージャを記述する場合 ), SYS$INPUT の等価文字列が現在実行中のコマンド・プロシージャを指すように変更されます。ただし,SYS$OUTPUT,SYS$ERROR,SYS$COMMAND の等価文字列は,明示的に変更を加えない限り変化はありません。
さらに,ファイルをオープンするコマンドを入力すると, DCLはそのファイルをプロセスパーマネント・ファイルとしてオープンします。たとえば,OPENコマンドでファイルをオープンすると,このファイルはプロセスパーマネント・ファイルとしてオープンされます。ファイルを明示的にクローズするか,またはログアウトするまで,このファイルはオープンされた状態です。
プロセスパーマネント・ファイルは,メモリの特殊な領域に格納されます。同時に多数のファイルをオープンした状態にしておくと,この領域を消耗してしまう可能性があるので注意してください。そのような状況が発生したら,ファイルをいくつかクローズ (するかまたはログアウト) してください。
11.13.2 プロセスパーマネント論理名を使用するファイル入出力の切り換え
プロセスパーマネント論理名を使用して,ファイル入出力を切り換えることができます。コマンド・プロシージャで,これらの名前を使用してターミナルからのデータを読み込み,データを表示することができます ( 第 13 章 および 第 14 章 を参照してください )。 DCL は,SYS$INPUT および SYS$COMMAND に対する新しい定義を無視するので注意してください。
OpenVMS バージョン 7.1 では,DCL PIPE コマンドが導入されました。 PIPE コマンドは,ファイル入出力を切り換える代替方法です。 PIPE コマンドについては,『OpenVMS DCL ディクショナリ: N--Z』を参照してください。
11.13.2.1 SYS$INPUT の再定義
SYS$INPUT を再定義して,コマンド・プロシージャによって起動されたイメージが端末や他のファイルからの入力を読み込むようにすることができます。 DCL は常に省略時設定の入力ストリームから入力を取得するので, DCL は SYS$INPUT の再定義を無視します。
次の例で,コマンドは新しいコマンド・プロシージャ・ファイルの一部です。 DEFINE コマンドは,SYS$INPUT を SYS$COMMAND に再定義します。 SYS$COMMAND は,ログイン時の最初の入力ストリームであるターミナルを参照します。この新しい定義で,コマンド・プロシージャによって起動されたイメージは,コマンド・プロシージャ・ファイルから ( 省略時設定 ) ではなくターミナルから入力を取得しますが,これは特定の期間に限られます。
/USER_MODE 修飾子は,SYS$INPUT が次のイメージの期間だけ再定義されることをコマンド・プロシージャに知らせます。この例では,次のイメージはエディタです。エディタが終了すると, SYS$INPUT はその省略時設定値を再開します。この場合,省略時設定値は,コマンド・プロシージャ・ファイルです。
$ DEFINE/USER_MODE SYS$INPUT SYS$COMMAND $ EDIT/TPU MYFILE.DAT . . . |
SYS$OUTPUT を再定義して,省略時設定の装置から別のファイルに出力を切り換えることができます。 SYS$OUTPUT を再定義すると,システムは論理名割り当てで指定した名前でファイルをオープンします。 SYS$OUTPUT を定義すると,すべての後続の出力は新しいファイルに出力されます。
忘れずに SYS$OUTPUT を割り当て解除してください。解除しないと,出力は指定したファイルに引き続き書き込まれます。ユーザ・モードで SYS$OUTPUT を再定義して ( DEFINE/USER_MODE で ),出力をイメージから切り換えることもできます。この定義は,次のコマンド・イメージが実行されるまでしか有効ではありません。いったんコマンド・イメージが実行されると ( つまり,出力がファイルに取り込まれると ),論理名 SYS$OUTPUT はその省略時設定値を再開します。
ログイン時に,システムは SYS$OUTPUT という 2 つの論理名を作成します。 1 つの名前はエグゼクティブ・モードで作成され,もう 1 つの名前はスーパバイザ・モードで作成されます。 SYS$OUTPUT を再定義してスーパバイザ・モード論理名を優先することができます。スーパバイザ・ノード名を再割り当てすると,システムは,エグゼクティブ・モードの等価文字列を使用して SYS$OUTPUT をスーパバイザ・モードで再定義します。エグゼクティブ・モード名は,割り当て解除することはできません。
SYS$OUTPUT をファイルに再定義すると,出力が指定したファイルに向けられていても,論理名にはファイル指定の装置部分しか含まれません。
SYS$OUTPUT を再定義したとき,システムが指定したファイルをオープンできない場合には,エラー・メッセージが表示されます。
SYS$OUTPUTを再定義すると,ほとんどのコマンドは出力を既存のバージョンのファイルに向けます。ただし,新しいバージョンのファイルを作成してから出力を書き込む特定のコマンドもあります。
次の例では,SYS$OUTPUT が MYFILE.LIS として定義されてから, SHOW DEVICES コマンドが入力されます。SHOW DEVICES によって生成される表示は,ターミナルではなく現在のディレクトリの MYFILE.LIS に向けられます。他のテキスト・ファイルの場合と同様に,このデータを操作することができます。
$ DEFINE SYS$OUTPUT MYFILE.LIS $ SHOW DEVICES |
以下の例では,SYS$OUTPUT がファイル TEMP.DAT に再定義されています。 SYS$OUTPUT が再定義されると, DCL からの出力とイメージからの出力はファイル TEMP.DAT に向けられます。 SHOW LOGICAL コマンドからの出力と SHOW TIME コマンドからの出力も, TEMP.DATに向けられます。SYS$OUTPUT が再割り当てされると,システムはファイル TEMP.DAT をクローズして, SYS$OUTPUT をターミナルに再定義します。TYPE コマンドが入力されると, TEMP.DAT に集められた出力がターミナルに表示されます。
$ DEFINE SYS$OUTPUT TEMP.DAT $ SHOW LOGICAL SYS$OUTPUT $ SHOW TIME $ DEASSIGN SYS$OUTPUT $ TYPE TEMP.DAT "SYS$OUTPUT" = "DISK1:" (LNM$PROCESS_TABLE) 06-MAY-1998 13:26:53 |
SYS$OUTPUT が再定義されると,等価文字列には装置名 DISK1 が含まれますが,ファイル指定全体は含まれません。
11.13.2.3 SYS$ERROR の再定義
SYS$ERROR を再定義して,エラー・メッセージを指定するファイルに向けることができます。ただし,SYS$ERROR を再定義したためこれが SYS$OUTPUT と異なる場合 ( または SYS$ERROR を同時に再定義せずに SYS$OUTPUT を再定義した場合 ) には, DCL コマンドは SYS$ERROR と SYS$OUTPUT の両方に,情報,警告,エラー,重大エラーメッセージを送ります。このため,SYS$ERROR の定義によって指示されたファイルで 1 回,そして SYS$OUTPUT によって指示されたファイルで 1 回と,これらのメッセージを合計 2 回受け取ることになります。正常終了のメッセージが送られるのは,SYS$OUTPUT に指示されたファイルだけです。
標準のエラー表示メカニズムを使用する DCL コマンドとイメージは, SYS$ERROR が SYS$OUTPUT と異なっていても, SYS$ERROR と SYS$OUTPUT の両方にエラー・メッセージを送ります。ただし,SYS$ERROR を再定義してから SYS$ERROR を参照するイメージを実行する場合,イメージがエラー・メッセージを送るのは,SYS$ERROR で指示されたファイルだけです。これは,SYS$ERROR が STS$OUTPUT と異なっている場合でも該当します。
11.13.2.4 SYS$COMMAND の再定義
SYS$COMMAND を再定義することはできますが,DCLはその定義を無視します。 DCL は常に,最初の入力ストリームに対して省略時の定義を使用します。ただし,SYS$COMMANDを参照するイメージを実行する場合には,イメージは新しい定義を使用することができます。
目次 | 索引 |
|