日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル >  V8.3ライブラリ

OpenVMS マニュアル


HP OpenVMS
DCL ディクショナリ


前へ 次へ 目次 索引



PIPE   コマンド・シーケンス ; コマンド・シーケンス [; コマンド・シーケンス]... 

  • 条件付きコマンド実行
    コマンド・シーケンスは,先行するコマンド・シーケンスの実行結果に応じて,条件付きで実行されます。
    次の形式を使用すると,コマンド・シーケンス 1 が成功した場合のみ,コマンド・シーケンス 2 が実行されます。


    PIPE   コマンド・シーケンス1   &&   コマンド・シーケンス2 
    


    次の形式を使用すると,コマンド・シーケンス 1 が失敗した場合のみ,コマンド・シーケンス 2 は実行されます。


    PIPE   コマンド・シーケンス1   ||   コマンド・シーケンス2 
    

  • パイプライン・コマンド実行
    パイプラインは,次のように DCL コマンドをパイプで接続して構成されます。


    PIPE パイプライン・セグメント・コマンド | パイプライン・セグメント・コマンド [|...] 
    


    各パイプライン・セグメント・コマンドは, SYS$OUTPUT を次のパイプライン・セグメント・コマンドの SYS$INPUT に接続し,別々のサブプロセスで実行されます。これらのサブプロセスは,パラレルに実行されます。ただし,最初のパイプライン・セグメント・コマンドを除く各パイプライン・セグメント・コマンドが,その先行パイプライン・セグメント・コマンドの標準出力をその標準入力として読み込むという意味で同期化されます。パイプラインは,最後のパイプライン・セグメント・コマンドが終了すると,実行を終了します。
    通常,パイプラインでは,「フィルタ・アプリケーション」を使用します。フィルタ・アプリケーションとは,SYS$INPUT からのデータを取り,特定の方法でデータを変換し,SYS$OUTPUT に書き込むプログラムのことです。

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


    PIPE   ( コマンド・シーケンス [区切り文字   コマンド・シーケンス]... ) 
    


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

  • バックグラウンド実行
    コマンド・シーケンスは,次の形式を使用して,サブプロセス環境で実行できます。


    PIPE  コマンド・シーケンス [ 区切り文字   コマンド・シーケンス]...  & 
    


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

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


       PIPE    コマンド・シーケンス   <   リダイレクトする入力ファイル 
    


    SYS$OUTPUTをリダイレクトするには,次のように実行します。


       PIPE    コマンド・シーケンス   >   リダイレクトする出力ファイル 
    


    SYS$ERRORをリダイレクトするには,次のように実行します。


       PIPE    コマンド・シーケンス 2   >   リダイレクトするエラー・ファイル 
    


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

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

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

    各コマンド・シーケンスは,実行を終了すると,グローバル・シンボル $STATUS に戻り値を設定します。 PIPE コマンドの戻り状態は,最後のセグメントで 最後に実行されたコマンド・シーケンスの戻り状態です。したがって,すべてのセグメントがエラーのために失敗しても,最後のセグメントが正常終了すれば, DCL には正常終了の状態が戻されます。

    PIPE コマンドを ON 条件処理でコマンド・プロシージャで実行すると,コマンド・シーケンスの条件付き実行 (&&, ||) は,先に ON 条件文で指定された動作より優先します。

    DCLコマンドの制限事項

    PIPE コマンドは,そのコマンド・シーケンス用に特殊な実行コンテキストを作成します。一部の DCL コマンドは,このコンテキストで動作しないか,新しい動作を示します。次に,そのコマンドを示します。

    • PIPE ---  同じコマンド・プロシージャ・レベルでは, PIPE コマンドをネストできません。コマンド・プロシージャ・レベルごとに, 1 つの PIPE コマンド・コンテキストだけが使用できます。ただし,異なるプロシージャ・レベルでは,PIPE コマンドをネストできます。次に例を示します。


              $ TYPE FOO.COM 
              $ ! FOO.COM 
              $       : 
              $ PIPE   ... 
              $       : 
              $ 
              $ PIPE    @FOO.COM ; ... 
      


      この例で,FOO.COM の内側にある PIPE コマンドは,異なるコマンド・プロシージャ・レベルで実行されるので使用できます。

    • GOTO および EXIT  ---  この 2 つのコマンドは, PIPE コマンド・シーケンスとして実行すると,GOTO または EXIT コマンドが実行される前に PIPE コマンド・コンテキストを削除します。 PIPE コマンドでこの 2 つのコマンドに続くコマンド・シーケンスは,フラッシュされます。

    • STOP  ---  STOP コマンドは, PIPE コマンドを Ctrl/Y で割り込んでから実行すると, PIPE コマンド・コンテキストを削除します。

    • THEN,ELSE,ENDIF,SUBROUTINE,ENDSUBROUTINE,RETURN,および DCL ラベル  ---  これらのコマンドは, PIPE コマンド・コンテキストでその関数を認識できないため, PIPE コマンド・シーケンスとして実行できません。

    サブプロセスの性能改善

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

    入出力リダイレクト

    DCL のユーザは,DEFINE または ASSIGN コマンドを使用して,SYS$INPUT, SYS$OUTPUT,または SYS$ERROR をリダイレクトできます。このようなリダイレクトは,ユーザ・モード (/USER_MODE 修飾子を使用 ) またはスーパバイザ・モード (/SUPERVISOR_MODE 修飾子を使用 ) のリダイレクトとして実行できます。ユーザ・モード・リダイレクトは,次のユーザ・モード・イメージの環境だけに影響します。

    PIPE コマンドでは,リダイレクトは,リダイレクト構文を使用して実行できます。 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 を再定義する場合と同じです。

    パイプラインおよび TEE

    この節では,パイプラインのコンテキストで一部異なる DCL の機能について説明します。

    次の構造のいくつかは,TEE を実現するために使用されます。

    SYS$COMMANDの使用方法

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

    TEE および 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 ; ...)  | ...
    

    パイプラインでのファイル・アクセス方法

    パイプライン・セグメント・コマンドは,パイプとの読み込みと書き込みに, 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 修飾子には,相対編成ファイル・アクセス方法が必要です。




    修飾子



    /LOGICAL_NAMES(省略時)



    /NOLOGICAL_NAMES

    プロセスの論理名と論理名テーブルを,コマンド・シーケンスのサブプロセスにコピーします。省略時の設定では,明示的に CONFINE のマークが付いたものとエグゼクティブ・モードまたはカーネル・モードで作成されたものを除き,すべてのプロセス論理名と論理名テーブルがサブプロセスにコピーされます。

    /PRIVILEGES={CURRENT|AUTHORIZED}

    サブプロセスが,現在のプロセスの現在の特権と許可されている特権のどちらを,許可された特権として継承するかを決定します。省略時の設定では,サブプロセスの許可された特権マスクは,作成者の現在の特権から継承されます。これは,/PRIVILEGES=CURRENT に対応します。 /PRIVILEGES=AUTHORIZED 修飾子を指定すると,サブプロセスの許可された特権は,作成者の許可された特権から継承されます。

    /SYMBOLS(省略時)



    /NOSYMBOLS

    ($RESTART,$SEVERITY,および $STATUSを除く ) グローバル・シンボルとローカル・シンボルを,サブプロセスへ渡すかどうかを指定します。 $RESTART,$SEVERITY,および $STATUS シンボルは,サブプロセスに渡されません。

    /TRUSTED



    /NOTRUSTED

    PIPE コマンドの入力が,信用できるコマンド・プロシージャから行われることを指定します。 PIPE コマンドは,CAPTIVE アカウントでは使用できません。 /TRUSTED 修飾子は,コマンドの入力がキャプティブ・コマンド・プロシージャ内の信用できる場所で行われる場合,正しくコーディングされたキャプティブ・コマンド・プロシージャが, PIPE 操作を実行する方法を提供します。信用できるコマンド・プロシージャについての詳細は,『OpenVMS システム・セキュリティ・ガイド』を参照してください。





    #1

    $ PIPE SHOW SYSTEM | SEARCH SYS$INPUT HIB
    

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

    #2

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

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

    #3

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

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

    #4

    $ more :== TYPE/PAGE=SAVE SYS$INPUT 
    $ PIPE    ANA/RMS PAGE.TXT | more 
     
    Check RMS File Integrity              26-DEC-2001 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-2001 16:08:50.05 
        Revision Date:   26-NOV-2001 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 
     
    

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

    #5

    $ ! 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 next stage of the pipeline 
    $  WRITE tee_file LINE  ! Log output to the log file 
    $  GOTO LOOP 
    $ EXIT: 
    $  CLOSE tee_file 
    $  EXIT 
    

    これは,パイプライン DCL アプリケーション TEE.COM の例です。

    TEE.COM を使用する PIPE コマンドは次のように指定することができます。


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

    コマンド・プロシージャ TEE.COM は,パイプラインを通じて送信されるデータのログを記録するために使用されています。これは,SYS$INPUT ではなく SYS$PIPE からのデータを読み込ます。

    #6

    $ 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: 
    $    : 
    

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

    #7

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

    コンパイルでエラーが発生しない場合,オブジェクト・ファイルは実行可能イメージを生成するためにリンクされます。コンパイル・エラーが発生すると,リンク・ステップはスキップされます。

    #8

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

    条件付きコマンド実行を使用すると,コマンド・プロシージャの中に単純なエラー処理制御フローを簡単に設定できます。 COLLECT_DATA イメージが失敗すると,制御が CLEAN_UP に移ります。

    #9

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

    この PIPE コマンドは,大型ファイルのコピーを処理するバックグラウンド・プロセスを作成します。

    #10

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

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

    #11

    $ RSH 0 PIPE SH DEC/FI | SH LOG/PR
    LNM$PROCESS_TABLE
      "SYS$COMMAND" = "_NODE$MPA24:"
      "SYS$DISK" = "SYS$SYSDEVICE:"
      "SYS$ERROR" = "_BG9930:"
      "SYS$INPUT" [super] = "_BG9930:"
      "SYS$INPUT" [exec] = "_NODE$MPA24:"
      "SYS$OUTPUT" [super] = "_BG9930:"
      "SYS$OUTPUT" [exec] = "_BG9930:"
      "SYS$PIPE" = "_NODE$MPA24:"
      "TT" = "_MPA24:"
     
    


    前へ 次へ 目次 索引



  •          印刷用画面へ

    プライバシー 本サイト利用時の合意事項