日本-日本語
日本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
ユーザーズ・マニュアル


目次 索引



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

PIPE   command-sequence1   &&   command-sequence2 

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

PIPE   command-sequence1   ||   command-sequence2 



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

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

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

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

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

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

  • SYS$COMMAND の使用
    サブプロセスの SYS$COMMAND は,通常,その SYS$INPUT(コマンド・プロシージャが関係しない場合)と同じです。ただしパイプラインでは,サブプロセスの SYS$COMMAND は,先行するパイプ(パイプライン・セグメント・コマンドの SYS$INPUT)ではなく,親プロセスの SYS$COMMAND に設定されます。

  • ファイル・アクセス方法
    パイプライン・セグメント・コマンドは,パイプとの読み込みと書き込みに, RMS 順編成ファイル・アクセス方法しか使用できません。一部の OpenVMS ユーティリティは,順次アクセス以外の方法を使用して,入力ファイルや出力ファイルにアクセスすることがあります。これらの操作は,パイプラインではサポートされていないので失敗します。次の例を参照してください。

    $ PIPE CC/NOOBJ/NOLIS TEST.C | SEARCH SYS$INPUT/WIND=(1,1) "%cc-w-"
     
    %SEARCH-F-RFAERR, RMS error using RFA access
    -RMS-F-RAC, invalid record access mode
    


    この例では,SEARCH コマンドに /WINDOW 修飾子を指定して実行するためには,相対編成ファイル・アクセス方法が必要です。

  • シンボルの置換
    DCL がシンボルを置換する順序に注意してください。シンボルの置換は,コマンド処理の第 1 フェーズで行われます。 PIPE コマンドの一部としてシンボルを定義した場合,DCL は,シンボルを置換してから,そのシンボルが実際に定義されているコマンドを実行しようとします。シンボルの置換を遅延させるには,アンパサンド (&) を使用します。詳細は, 第 12.12.2 項 を参照してください。

  • SYS$PIPE の使用
    ほとんどの場合,パイプからの入力は, SYS$INPUT からデータを読み込むことにより取得できます。ただし,コマンド・プロシージャがパイプライン・セグメント・コマンドとして起動される場合は, SYS$INPUT はコマンド・プロシージャ・ファイルにリダイレクトされます。コマンド・プロシージャの中でパイプからデータを取得するには,論理名 SYS$PIPE を使用できます。
    次に,パイプライン DCL アプリケーション例 TEE.COM を示します。

            $ ! TEE.COM - command procedure to display/log data flowing through 
            $ !           a pipeline 
            $ ! Usage: @TEE log-file 
            $ 
            $ OPEN/WRITE  tee_file 'P1' 
            $ LOOP: 
            $  READ/END_OF_FILE=EXIT  SYS$PIPE LINE 
            $  WRITE SYS$OUTPUT LINE ! Send it out to the next stage of the pipeline 
            $  WRITE tee_file LINE   ! Log output to the log file 
            $  GOTO LOOP 
            $ EXIT: 
            $  CLOSE tee_file 
            $  EXIT 
    


    TEE.COM を使用して,次の PIPE コマンドを入力します。

    $ PIPE  SHOW SYSTEM | @TEE showsys.log | SEARCH SYS$INPUT LEF
    


    コマンド・プロシージャ TEE.COM は,パイプラインを流れるデータを記録します。データは,SYS$INPUT ではなく SYS$PIPE から読み込まれます。

  • イメージのチェック
    パイプラインでは, PIPE コマンドを入力する前に SET VERIFY=IMAGE コマンドを実行した場合でも,省略時の設定でイメージのチェックはオフになっています。これにより,データ・レコードが重複してパイプラインを通過しないようになります。
    パイプラインでのイメージのチェックをオンにするには,パイプライン・セグメント・コマンドの前に明示的に SET VERIFY=IMAGE コマンドを使用しなければなりません。この場合,次のようにサブシェルを使用できます。

    $ PIPE ... | (SET VERIFY=IMAGE ; ...)  | ...
    



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

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

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

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

この形式の PIPE コマンドを使用するときには,シンボルの置換の扱いに注意してください。シンボルを定義した後,そのシンボルを使用するときには,シンボルの前にアンパサンド (&) を付けてシンボルの置換を遅延させます。アンパサンドを付けなかった場合,シンボルの置換はコマンド処理の第 1 フェーズで行われ,シンボルの定義が信頼できないものになります。

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

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

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

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

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

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

  • SYS$INPUT をリダイレクトするには,次の形式を使用します。

       PIPE    command-sequence < redirected-input-file 
    

  • SYS$OUTPUT をリダイレクトするには,次の形式を使用します。

       PIPE    command-sequence > redirected-output-file 
    

  • SYS$ERROR をリダイレクトするには,次の形式を使用します。

       PIPE    command-sequence 2> redirected-error-file 
    

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

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

  • リダイレクトは,スーパバイザ・モードで作成される。つまり,ユーザ・モード・アプリケーションと DCL コマンドの両方が,リダイレクトに影響される。

  • リダイレクトされた環境は,リダイレクト構文を指定するコマンド・シーケンス,またはパイプライン・セグメント・コマンドだけに適用される。コマンド・シーケンスまたはパイプライン・セグメント・コマンドの実行後,コマンドの実行が続行される前に,元のプロセスの入出力環境 ( たとえば SYS$INPUT, SYS$OUTPUT,および SYS$ERROR ) が復元される。

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 を再定義する場合と同じです。

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

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

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

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

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

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

  • 次の例は,シンボル定義を持つ複数のコマンドを使用して,コマンド・プロシージャに有用なツールを作成する 2 つの簡単な方法を示しています。

    $ CD_WORK :== PIPE   SAVE_DIR=F$DIRECTORY() ; SET DEFAULT FOO:[WORK] 
    $ BACK  :== SET DEF 'SAVE_DIR' 
    $ 
    $ CD_WORK  ! Switch to working directory 
    $     : 
    $     : 
    $ BACK     ! Switch back to home directory 
    $ GET_RECORD :== PIPE READ/END_OF_FILE=CLEANUP IN RECORD ; - 
                                    F$EDIT(RECORD, "COMPRESS, TRIM") 
    $ 
    $ OPEN IN EMPLOYEE.DAT 
    $ LOOP: 
    $ GET_RECORD 
    $    : 
    $    : 
    $ GOTO LOOP 
    $ 
    $ CLEAN_UP: 
    $    : 
    

  • 次の例は,コンパイルおよびリンク操作を示しています。コンパイル中にエラーが発生しなければ,オブジェクト・ファイルは実行可能イメージを生成するためにリンクされます。コンパイル・エラーが発生すると,リンクはスキップされます。

    $ PIPE cc foo.c && link foo, sys$library:vaxcrtl.olb/lib
    

  • 次の例は,条件付きコマンドを実行して,コマンド・プロシージャ中にエラー処理制御フローを簡単に作成する方法を示しています。イメージ COLLECT_DATA が失敗すると,制御は CLEAN_UP に移ります。

    $ PIPE RUN COLLECT_DATA.EXE || GOTO CLEAN_UP 
    $       : 
    $       : 
    $ EXIT 
    $ 
    $ CLEAN_UP: 
    $       : 
    $       : 
    

  • この例の PIPE コマンドは,大きなファイルをコピーするためのバックグラウンド・プロセスを作成します。

    $ PIPE COPY LARGE_FILE.DAT REMOTE"user password"::[DESTINATION]*.*  &
    

  • 次の例は,サブシェル・コマンド・シーケンスを,サブプロセスで実行しています。その結果,プロセス固有の属性 ( たとえば省略時のディレクトリ ) を変更しても,サブシェルの終了後,現在のプロセスに影響しません。この例では,プログラム FOO を実行するために必要なデータを提供するため,セーブ・セットがサブディレクトリに復元されます。

    $ PIPE (SET DEF [.DATA_DIR] ; BACKUP  DATA.SAV/SAV [...]) ; RUN FOO
    

  • 次の例は,パイプライン機能を使用して,システム上のすべてのバイバネート・プロセスを 1 つのコマンドで特定します。

    $ PIPE SHOW SYSTEM | SEARCH SYS$INPUT HIB
    

  • 次の例は,パイプライン機能を使用して,1 つのコマンドでテストを実行し,その結果をソートし,結果をベンチマーク・ファイルと比較します。この時,不要な中間ファイルは生成します。

    $ PIPE RUN TEST | SORT/SPECIFICATION=TEST.SRT SYS$INPUT SYS$OUTPUT - 
              | DIFF SYS$INPUT  TEST.BENCHMARK
    

  • 次の例は,パイプラインで,パイプ・セグメント・コマンドとしてサブシェルを指定する 1 つの方法を示しています。

    $ PIPE  ( SET DEF WRK$:[WORK] ; RUN REPORT ) | MAIL SYS$INPUT SMITH
    

  • 次の例は,パイプラインで /PAGE 修飾子を使用する例です。 /PAGE は,他の多数のコマンドにも存在し,同じように PIPE コマンドと組み合わせて使用して他の有用なツールを作成することができます。

    $ more :== TYPE/PAGE=SAVE SYS$INPUT 
    $ PIPE    ANA/RMS PAGE.TXT | more 
     
    Check RMS File Integrity                         26-JAN-2002 16:12:00.06  Page 1 
    SYS$SYSDEVICE:[TEST]PAGE.TXT;2 
     
    FILE HEADER 
     
        File Spec: SYS$SYSDEVICE:[TEST]PAGE.TXT;2 
        File ID: (4135,58220,0) 
        Owner UIC: [PIPE] 
        Protection:  System: RWED, Owner: RWED, Group: RE, World: 
        Creation Date:   26-NOV-2002 16:08:50.05 
        Revision Date:   26-NOV-2002 16:09:09.06, Number: 1 
        Expiration Date: none specified 
        Backup Date:     none posted 
        Contiguity Options:  none 
        Performance Options: none 
        Reliability Options: none 
        Journaling Enabled:  none 
     
    RMS FILE ATTRIBUTES 
     
    RETURN/SPACE=More, PREV/NEXT=Scroll, INS/REM=Pan, SELECT=80/132, Q=Quit 
    


目次 索引

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