Systemwalker Operation Manager リファレンスマニュアル - Microsoft(R) Windows NT(R)/Windows(R) 2000/Windows Server(TM) 2003 - |
目次
索引
![]() ![]() |
第13章 Systemwalkerスクリプト | > 13.2 Systemwalkerスクリプトで使用するコマンド・制御文 |
サブプロセスを起動し、プログラムのコマンドを実行します。
exec cmd /c cmdname 【args …】 |
注) execコマンドは、cmd /cと併せて使用してください。
ファイルをパス指定で与える場合は、ディレクトリの区切りに“\”(円記号)を使用してファイル名全体を“{ }”(中括弧)で囲む必要があります。
最後のargsが“&”の場合、コマンドはバックグラウンドで実行されます。コマンドは通常、フォアグラウンドで実行され、execコマンドはcmdnameのプロセス終了を待ちますが、バックグラウンドで実行した場合は、終了を待たずに復帰します。
また、argsにはフロー制御記号を指定することが可能です。
argsに以下のフロー制御記号を記述することで、起動コマンドの標準入出力への操作や複数コマンドを起動しての情報のやりとりが可能となります。
記号・書式 |
意味 |
例 |
| |
パイプライン中の個々のコマンドを区切ります。前のコマンドの標準出力を後のコマンドの標準入力へつなげます。同様にして3つ以上のコマンドをつないでいくことが可能です。 |
exec cmd /c dir |cmd /c sort |
< filename |
cmdnameの標準入力として、filenameで指定したファイルの内容が読み込まれます。(注1) |
exec cmd /c sort < data.txt |
<< value |
cmdnameの標準入力として、valueで指定した値(文字列)が読み込まれます。(注1) |
exec cmd /c sort << $data |
> filename |
cmdnameの標準出力がfilenameで指定したファイルに上書きで書き込まれます。(注1) |
exec cmd /c dir > data |
>& filename |
cmdnameの標準出力と標準エラー出力がfilenameで指定したファイルに上書きで書き込まれます。(注1) |
exec cmd /c dir data >& out |
2> filename |
cmdnameの標準エラー出力がfilenameで指定したファイルに上書きで書き込まれます。(注2) |
exec cmd /c dir data 2> out |
注1) cmdnameの部分が“|”により複数のコマンドからなる場合、 読み込みは先頭のコマンドが、書き込みは末尾のコマンドがその 対象となります。 注2) cmdnameの部分が“|”により複数のコマンドからなる場合、 すべてのコマンドの標準エラー出力がfilenameで指定した ファイルに格納されます。
フロー制御により複数のコマンドが実行される場合は、末尾のコマンドがその対象となります。
また、フロー制御により標準出力がリダイレクトされている場合は、空文字列を返します。
フロー制御により複数のコマンドが実行される場合は、全プロセスIDが空白で区切って返されます。
Windows NT(R) 4.0上では、1つのスクリプト内で繰り返してexecコマンドの呼出しを行うと、execコマンドがハングアップする可能性があります。呼出しは、目安として1スクリプトあたり100回程度までにすることを推奨します。
execコマンドを繰り返して呼び出す必要がある場合には、スクリプトファイルを分割して、1スクリプトファイルあたりで呼び出すexecコマンドの回数を少なくしてください。分割したスクリプトファイルは、execコマンドによりswotclshコマンドの引数として、スクリプト内で実行させることができます。分割したスクリプトの実行例を以下に示します。
例:
exec cmd /c swotclsh {c:\script\part1.swt} |
なお、execコマンドを複数回数呼び出すスクリプトを作成した場合は、スクリプトの動作確認時に最大回数までのexec呼出しを実施して、すべての呼出しが正常に行われることを確認してください。
#アプリケーションを起動します。標準出力を変数“outmsg”に格納します。 |
注:catchによる処理例外設定がないため、execで起動したコ マンドが、 “0”以外の終了コードで終了したり、異常終 了した場合に以下の問題が発生します。
・ジョブの終了コードは“1”となり、実行コマンドの終了コードが採用されない。
・実行コマンドが標準エラー出力に出力したエラーメッセージ等を獲得することができない。
これらを回避するために、コマンドを起動する際にはcatch コマンドによる処理例外のトラップをすることを推奨しま す。
標準出力/標準エラー出力情報(errorInfo)について
コマンドの標準出力/標準エラー出力がリダイレクトされていない場合、グローバル変数errorInfoの先頭にその出力文字列が格納されます。errorInfoには、exec文自身の実行エラーを示す文字列も格納されます。
例:
以下の仕様のアプリケーション(c:\usr\bin\appl001.exe)がエラー終了した場合仕様:指定された日付のデータを標準出力に書き込む。 日付の指定が不当な場合は以下のメッセージを標準エラー出力に出力する。 “日付の指定に誤りがあります。yyyymmdd で指定してください。”
if {[catch {
exec cmd /c {c:\usr\bin\appl001.exe} 010520
}]} {
puts "エラー情報 START"
puts $errorInfo
puts "エラー情報 END"
}
上記を実行すると、標準出力には以下のように表示されます。
エラー情報START
日付の指定に誤りがあります。yyyymmddで指定してください。←appl001コマンドの出力
while executing ← exec文自身の実行エラーを
"exec cmd /c {c:\usr\bin\appl001.exe} 010520" ← 示す文字列
エラー情報END
終了コード(errorCode)について
コマンドの終了コードが“0”以外の場合は、グローバル変数errorCodeに以下の書式で終了コードが格納されています。
CHILDSTATUS pid exitcode
- pid
- ここに入る数字は意味を持ちません。
- exitcode
- プロセスの終了コード
実行コマンドのリダイレクトされていない入出力は以下のとおりに扱われます。
入出力 |
フォアグランド実行 |
バックグランド実行 |
標準入力 |
スクリプトプロセス自身の標準入力から読み込まれる。 | |
標準出力 |
通常は、execコマンドの戻り値となる。 |
スクリプトプロセス自身の標準出力に書き込まれる。 |
標準エラー出力 |
execコマンドの処理例外として扱われ、catchでトラップした場合にはerrorInfoに格納される。 |
スクリプトプロセス自身の標準エラー出力に書き込まれる。 |
execで起動するコマンドに渡す引数の最後に“&”を記述するとバックグラウンドでコマンドが起動されます。この場合、コマンドの実行の終了を待たずに、スクリプトの処理は進行するため、注意が必要です。
また、バックグラウンドで起動した場合、execコマンドの復帰値は実行コマンドのプロセスIDとなります。アプリケーションが出力する標準出力をexecコマンドの復帰値として獲得することはできません。
dirコマンドを実行し、コマンドの標準出力/標準エラー出力をすべてスクリプトの標準出力へ出力させます。
if {[catch { |
標準出力には、以下のように表示されます。
ドライブ C のボリューム ラベルはありません。 |
ドライブ C のボリューム ラベルはありません。 |
目次
索引
![]() ![]() |