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


前へ 次へ 目次 索引


16.20.1 条件コマンド実行のための PIPE コマンドの使用

先行するコマンド・シーケンスの実行結果により,次のコマンド・シーケンスが実行されます。


PIPE   command-sequence1   &&   command-sequence2 

command-sequence1 が成功した時のみ, command-sequence2 が実行される点に注意してください。次の形式を使用すると,command-sequence1 が失敗した時のみ command-sequence2 が実行されます。


PIPE   command-sequence1   ||   command-sequence2 

16.20.2 パイプライン実行のための PIPE コマンドの使用

パイプラインは,縦線(|)区切り文字で表されるパイプ で接続されたパイプライン・セグメント・コマンドのシーケンスです。パイプライン・セグメント・コマンドとは,パイプライン内の DCL コマンドです。パイプはパイプライン・セグメント・コマンドの SYS$OUTPUT を,次のコマンドの SYS$INPUT に接続します。パイプラインの形式を次に示します。


PIPE pipeline-segment-command | pipeline-segment-command [|...] 

各パイプライン・セグメント・コマンドは, SYS$OUTPUT を次のパイプライン・セグメント・コマンドの SYS$INPUT に接続し,別々のサブプロセスで実行されます。これらのサブプロセスはパラレルに実行されます。ただし,最初のパイプライン・セグメント・コマンドを除く各パイプライン・セグメント・コマンドが,その先行パイプライン・セグメント・コマンドの標準出力をその標準入力として読み込む程度に同期化されます。最後のパイプライン・セグメント・コマンドが終了すると,パイプラインは実行を終了します。

通常,パイプラインでは "フィルタ・アプリケーション"を使用します。フィルタ・アプリケーションとは,SYS$INPUT からのデータを取り,指定した方法でデータを変換し,それを SYS$OUTPUT に書き込むプログラムのことです。

パイプラインのコンテキストでは,DCL の機能は一部異なります。次に例を示します。

16.20.3 サブシェル実行のための PIPE コマンドの使用

サブシェルは,区切り文字で区切られ,括弧で囲まれた 1 つまたは複数のコマンド・シーケンスです。サブシェルの形式を次に示します。


PIPE   ( command-sequence [separator command-sequence]... ) 

サブシェル内のコマンド・シーケンスは,サブプロセス環境で実行されます。 DCL は,サブシェルが終了してから,次のコマンド・シーケンスを実行します。 ( )区切り文字は,SPAWN/WAIT コマンドに似ています。

16.20.4 バックグラウンド実行のための PIPE コマンドの使用

コマンド・シーケンスは,次の形式を使用してサブプロセス環境で実行されます。


PIPE  command-sequence [ separator command-sequence]...  & 

DCL は,コマンド・シーケンスの終了を待ちません。バックグラウンド・サブプロセスが作成されると,制御は DCL に戻ります。

16.20.5 入出力リダイレクトのための PIPE コマンドの使用

コマンド・シーケンスは,次のようにコマンドの実行中に, SYS$INPUT,SYS$OUTPUT,または SYS$ERROR をファイルにリダイレクトできます。

パイプライン・セグメント・コマンドも, SYS$INPUT,SYS$OUTPUT,または SYS$ERROR をリダイレクトできます。ただし,SYS$OUTPUT のリダイレクトは,最後のパイプライン・セグメント・コマンドだけに使用でき, SYS$INPUT のリダイレクトは,最初のパイプライン・セグメント・コマンドだけに使用できます。

PIPE コマンドのリダイレクトは,DEFINE コマンドや ASSIGN コマンドを使用して行うリダイレクトとは異なります。相違点を以下に示します。

SYS$OUTPUT をリダイレクトすると,コマンド・シーケンスが実際に SYS$OUTPUT に書き込むかどうかにかかわらず,常にリダイレクトされた出力ファイルが作成されます。リダイレクトされた出力ファイルと同じ名前を持つファイルのバージョンがすでに存在する場合,そのファイルの新しいバージョンが作成されます。この動作は,スーパバイザ・モードで DEFINE または ASSIGN コマンドを使用して, SYS$OUTPUT を再定義する場合と同じです。リダイレクトされたファイルは,コマンド・シーケンスが実行される前に作成されることに注意してください。次の例のように,リダイレクトされたファイルがコマンド・シーケンスでも使用される場合は,操作が失敗することがあります。


$ PIPE SEARCH TRANS.LOG "alpha" > TRANS.LOG
%SEARCH-W-OPENIN, error opening TRANS.LOG;2 as input
-RMS-E-FLK, file currently locked by another user

この例では,新しいバージョンの TRANS.LOG が作成され,書き込みアクセス用にオープンされます。次に SEARCH コマンドが,前のバージョンではなく最新バージョンの TRANS.LOG に読み込みアクセスしようとします。

SYS$ERROR をリダイレクトすると,コマンド・シーケンスが実行中に実際に SYS$ERROR に書き込む場合のみ,リダイレクトされたファイルが作成されます。リダイレクトされたエラー・ファイルと同じ名前を持つ既存のファイルは存在しません。リダイレクトされたエラー・ファイルと同じ名前を持つファイルがすでに存在する場合は,そのファイルがリダイレクトされたエラー・ファイルとしてオープンされます。次に,このコマンド・シーケンスで作成されたエラー出力は,リダイレクトされたエラー・ファイルの最後に追加されます。この動作は,スーパバイザ・モードで DEFINE または ASSIGN コマンドを使用して, SYS$ERROR を再定義する場合と同じです。

16.20.6 PIPE コマンドへの割り込み

Ctrl/Y を押すと,PIPE コマンドに割り込みをかけることができます。 PIPE コマンドをパイプラインまたはサブシェル・コマンド・シーケンスで実行している場合は,コマンド・シーケンスと PIPE コマンドが削除されます。この場合,割り込み直後に CONTINUE コマンドを入力しても, PIPE コマンドの実行は再開されません。

PIPE コマンドが,サブシェル・コマンド・シーケンスまたはパイプライン・コマンド・シーケンス以外の,コマンド・シーケンスを実行している場合は,DCL は,コマンド・シーケンスが PIPE コマンド動詞なしで入力され, Ctrl/Y で割り込みをかけられたように動作します。 Ctrl/Y 割り込みについての詳細は, 第 3.11.2 項 および 第 15.11 節 を参照してください。

16.20.7 サブプロセスの性能向上

PIPE コマンドは,実行中に多数のサブプロセスを作成できます。通常,コマンド・シーケンスにより起動されるアプリケーションは,プロセスの論理名とシンボル名に依存しません。この場合,/NOLOGICAL_NAME および /NOSYMBOLS 修飾子を使用すると,サブプロセスを素早く作成できます。これらの修飾子により,プロセスの論理名とシンボル名は, PIPE コマンドにより作成されたサブプロセスに渡されなくなります。

PIPE コマンドの使用例を次に示します。


前へ 次へ 目次 索引