前へ | 次へ | 目次 | 索引 |
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 コマンドの使用例を次に示します。
$ 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 |
$ PIPE RUN COLLECT_DATA.EXE || GOTO CLEAN_UP $ : $ : $ EXIT $ $ CLEAN_UP: $ : $ : |
$ PIPE COPY LARGE_FILE.DAT REMOTE"user password"::[DESTINATION]*.* & |
$ PIPE(SET DEF [.DATA_DIR] ; BACKUP DATA.SAV/SAV [...]); RUN FOO |
$ PIPE SHOW SYSTEM | SEARCH SYS$INPUT HIB |
$ PIPE RUN TEST | SORT/SPECIFICATION=TEST.SRT SYS$INPUT SYS$OUTPUT - | DIFF SYS$INPUT TEST.BENCHMARK |
$ PIPE (SET DEF WRK$:[WORK] ; RUN REPORT)| MAIL SYS$INPUT SMITH |
$ 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 |
レキシカル関数は,コマンド行またはコマンド・プロシージャに情報を戻します。戻される情報は,プロセス,システム,ファイルとデバイス,論理名,文字列,データ型に関するものです。レキシカル関数には,接頭辞 F$ が付いています。
レキシカル関数は,通常,シンボルや式を使用するコンテキストの中で使用します。コマンド・プロシージャの中では,論理名を変換したり,文字列処理を行ったり,プロシージャの現在の処理モードを判別したりするのに使用します。レキシカル関数が戻す情報の多くは,DCL コマンドで取得することもできます。
本章では,次のことを説明します。
レキシカル関数についての詳しい説明は,オンライン・ヘルプを参照してください。本章で説明するコマンドについての詳細は,『OpenVMS DCL ディクショナリ』を参照してください。
15.1 なぜレキシカル関数を使うのか
コマンドから情報を得るよりもレキシカル関数から情報を得た方が,コマンド・プロシージャの中で情報を処理しやすくなります。たとえば,F$ENVIRONMENT 関数または SHOW DEFAULT コマンドのどちらを使用しても,現在の省略時のディレクトリの名前を得ることができます。ただし,次の点が異なります。
$ DIR_NAME = F$ENVIRONMENT("DEFAULT") $ SET DEFAULT DISK4:[TEST] . . . $ SET DEFAULT 'DIR_NAME' |
上記の例で,F$ENVIRONMENT 関数は,現在の省略時のディスクとディレクトリを戻し,この値を DIR_NAME シンボルに格納する。プロシージャの終わりに,この DIR_NAME シンボルを使用して SET DEFAULT コマンドによって省略時の値に戻している。
$! Redirect the output of the SHOW DEFAULT command to a file. $ DEFINE/SUPERVISOR_MODE SYS$OUTPUT DISK4:[TEST]TEMPFILE.DAT $ SHOW DEFAULT $ DEASSIGN SYS$OUTPUT $! $ OPEN/READ DIR_FILE DISK4:[TEST]TEMPFILE.DAT ! Open the file. $ READ DIR_FILE DIR_NAME, ! Read the file. $ SET DEFAULT 'DIR_NAME' ! Reset the directory. $ CLOSE DIR_FILE ! Close the file. $ DELETE DISK4:[TEST]TEMPFILE.DAT;* ! Delete the file. |
コマンド・プロシージャを実行している間,プロセス属性を頻繁に変更し,その後で属性を復元します。次のレキシカル関数を使用すれば,プロセスに関する情報を入手できます。
F$DIRECTORY | 現在の省略時のディレクトリ文字列を戻す。 |
F$ENVIRONMENT | ユーザ・プロセスのコマンド環境についての情報を戻す。 |
F$GETJPI | ユーザ・プロセスまたはシステム上の他のプロセスについての会計情報,状態,識別情報を戻す。 |
F$MODE | プロセスを実行中のモードを示す。 |
F$PRIVILEGE | ユーザ・プロセスに特権が指定されているかどうかを示す。 |
F$PROCESS | プロセスの名前を戻す。 |
F$SETPRV | 指定された特権を設定する。指定された特権が,F$SETPRV 関数を使用する前に使用可能であったかどうかも示す。 |
F$USER | UIC(ユーザ識別コード)を戻す。 |
F$VERIFY | チェック機能のオンまたはオフを示す。 |
次の表は,コマンド・プロシージャで一般に変更されるプロセス属性を示しています。また,これらの属性をセーブするレキシカル関数と,元の設定を復元する DCL コマンドも示しています。
属性 | 操作 | コマンドまたはレキシカル関数 |
---|---|---|
制御文字 | セーブ | F$ENVIRONMENT("CONTROL") |
復元 | SET CONTROL | |
DCL プロンプト | セーブ | F$ENVIRONMENT("PROMPT") |
復元 | SET PROMPT | |
省略時の保護 | セーブ | F$ENVIRONMENT("PROTECTION") |
復元 | SET PROTECTION/DEFAULT | |
キー状態 | セーブ | F$ENVIRONMENT("KEY_STATE") |
復元 | SET KEY | |
メッセージ形式 | セーブ | F$ENVIRONMENT("MESSAGE") |
復元 | SET MESSAGE | |
特権 | セーブ | F$PRIVILEGE または F$SETPRV |
復元 | F$SETPRV または SET PROCESS/PRIVILEGES | |
チェック機能 | セーブ | F$VERIFY または F$ENVIRONMENT |
復元 | F$VERIFY または SET VERIFY |
プロセス属性をセーブした場合,エラーまたは Ctrl/Y による割り込みによって,元の属性を復元する前にプロシージャが終了することのないようにしなければなりません。エラーと Ctrl/Y による割り込みの処理については,第 13 章 を参照してください。
15.2.1 チェック設定値の変更
F$VERIFY レキシカル関数を使用すると,コマンド・プロシージャが実行されている間だけチェック機能を無効にすることができます。このとき,ユーザは,プロシージャを実行しながらそのプロシージャの内容を表示することはできません。
チェック機能には,次の 2 つのタイプがあります。
各コマンド行を実行しながら表示する。
各データ行を処理しながら表示する。
省略時の設定では,SET [NO]VERIFY コマンドと F$VERIFY レキシカル関数は,両方のタイプのチェック機能をオン,オフします。通常は,プロシージャの中のプロージャおよびイメージ・チェック設定値は同じになっています(両方がオンか,両方がオフになっています)。ただし,設定値を変更する場合には,それぞれのチェック設定値を別々にセーブします。
次の例では,シンボル TEMP を使用して,チェック機能を有効および無効に設定します。
$ ! Enable verification $ ! $ TEMP = F$VERIFY(1) $ LOOP: $ INQUIRE FILE "File name" $ IF FILE .EQS."" THEN EXIT $ PRINT 'FILE' $ GOTO LOOP $ ! Disable verification $ ! $ TEMP = F$VERIFY(0) $ EXIT |
次の例では,チェック機能の設定がセーブされます。
$ ! Save each verification state $ ! Turn both states off $ SAVE_VERIFY_IMAGE = F$ENVIRONMENT("VERIFY_IMAGE") $ SAVE_VERIFY_PROCEDURE = F$VERIFY(0) . . . $ ! Restore original verification states $ SAVE_VERIFY_IMAGE = F$VERIFY(SAVE_VERIFY_PROCEDURE,- SAVE_VERIFY_IMAGE) |
上記の例で,F$ENVIRONMENT 関数は,現在のイメージ・チェック設定値を戻し,この値を SAVE_VERIFY_IMAGE シンボルに割り当てています。次に,F$VERIFY 関数が現在のプロシージャ・チェック設定値を戻し,この値を SAVE_VERIFY_PROCEDURE シンボルに割り当てています。F$VERIFY 関数は,イメージ・チェックとプロシージャ・チェックの両方を無効にします。F$ENVIRONMENT 関数を使用すれば,F$VERIFY によってチェック機能を無効にする前にプロシージャ・チェック設定値を得ることができます。ただし,上記の例に示すように,F$VERIFY を使用して 1 つのコマンド行の中で両方のタスクを行った方がプロシージャの長さが短くてすみます。
プロシージャの終わりに,F$VERIFY 関数で元の設定値(シンボル SAVE_VERIFY_PROCEDURE と SAVE_VERIFY_IMAGE によって指定される)を復元しています。
時刻印字を使用する場合,チェック機能が使用可能な場合にだけ適用されることに注意してください。時刻印字と SET PREFIX コマンドについての詳細は,『OpenVMS DCL ディクショナリ』または DCL ヘルプを参照してください。 |
コマンド・プロシージャの中で省略時のファイル保護を変更したい場合があります。次のコマンド・プロシージャは,プロシージャの実行中に作成されたファイルに関連する省略時の保護を変更します。この場合,終了する前に元の省略時のファイル保護を復元しています。
$ SAVE_PROT = F$ENVIRONMENT("PROTECTION") $ SET PROTECTION =(SYSTEM:RWED, OWNER:RWED, GROUP, WORLD)/DEFAULT . . . $ SET PROTECTION=('SAVE_PROT')/DEFAULT $ EXIT |
この例で,F$ENVIRONMENT 関数は,SET PROTECTION コマンドの構文を使用して省略時の保護コードを戻しています。このため,SET PROTECTION コマンドと一緒に SAVE_PORT シンボルを使用して元の省略時のファイル保護を復元できます。
15.3 システムについての情報
システムについての情報を得るには,次のレキシカル関数を使用します。
F$CONTEXT | F$PID 関数と一緒に使用する場合の選択基準を指定する。F$CONTENT 関数と一緒に F$PID 関数を使用すると,OpenVMS Cluster の任意のノードのプロセスについての情報を得ることができる。 |
F$CSID | VMS クラスタ識別番号を戻して,システムのVMS クラスタ・ノード・リストの中の現在の位置を指すようにコンテキスト・シンボルを更新する。 |
F$GETQUI | システム・ジョブ・キュー・ファイルに収められたキュー,現在キューの中にあるバッチ・ジョブと印刷ジョブ,フォーム定義,属性定義についての情報を戻す。 |
F$GETSYI | ローカル・システムまたは VMS クラスタ内のノード(システムが VMS クラスタの一部である場合)についての情報を戻す。 |
F$IDENTIFIER | 識別子を指定された形式から数値形式に,または数値形式から指定された形式に変換する。 |
F$MESSAGE | 状態コードに関連するメッセージ・テキストを戻す。 |
F$PID | ユーザがチェックすることが許容されているプロセスのプロセス識別番号(PID)を戻す。 |
F$TIME | 現在の日時を戻す。 |
前へ | 次へ | 目次 | 索引 |