ページのトップに戻る
Systemwalker Operation Manager  リファレンスマニュアル

16.2.7 exec(サブプロセスを起動する)

機能説明

サブプロセスを起動し、プログラムのコマンドを実行します。

記述形式

【Windows版】

exec cmd /c cmdnameargs …

注) execコマンドは、cmd /cと併せて使用してください。

【UNIX版】

exec cmdnameargs …

オプション

cmdname

起動するコマンドファイル名を指定します。Windows上のファイル名の場合は、ディレクトリの区切りを“¥”(円記号)の他に“/”(スラッシュ)で記述することが可能です。円記号を使用する場合は、エスケープ文字に扱われないようファイル名全体を“{ }”(中括弧)で囲む必要があります。

args …

起動するコマンドに渡す引数を指定します。

最後のargsが“&”の場合、コマンドはバックグラウンドで実行されます。コマンドは通常、フォアグラウンドで実行され、execコマンドはcmdnameのプロセス終了を待ちますが、バックグラウンドで実行した場合は、終了を待たずに復帰します。

また、argsにはフロー制御記号を指定することが可能です。

Windowsの場合、ファイルをパス指定で与える時は、ディレクトリの区切りに“¥”(円記号)を使用してファイル名全体を“{ }”(中括弧)で囲む必要があります。

フロー制御

argsに以下のフロー制御記号を記述することで、起動コマンドの標準入出力への操作や複数コマンドを起動しての情報のやりとりが可能となります。

記号・書式

意味

|

パイプライン中の個々のコマンドを区切ります。前のコマンドの標準出力を後のコマンドの標準入力へつなげます。同様にして3つ以上のコマンドをつないでいくことが可能です。
“|”の代わりに“|&”を使用すると標準出力の他に標準エラー出力も後のコマンドの標準入力につながれます。

【Windows版】
exec cmd /c dir |cmd /c sort
【UNIX版】
exec ls -l | grep root

< filename

cmdnameの標準入力として、filenameで指定したファイルの内容が読み込まれます。(注1)

【Windows版】
exec cmd /c sort < data.txt
【UNIX版】
exec sort < data.txt

<< value

cmdnameの標準入力として、valueで指定した値(文字列)が読み込まれます。(注1)

【Windows版】
exec cmd /c sort << $data
【UNIX版】
exec sort << $data

> filename

cmdnameの標準出力がfilenameで指定したファイルに上書きで書き込まれます。(注1)
“>”の代わりに“>>”を使用すると上書きでなく追加で書き込まれます。

【Windows版】
exec cmd /c dir > data
【UNIX版】
exec ls > data

>& filename

cmdnameの標準出力と標準エラー出力がfilenameで指定したファイルに上書きで書き込まれます。(注1)
“>&”の代わりに“>>&”を使用すると上書きでなく追加で書き込まれます。

【Windows版】
exec cmd /c dir data >& out
【UNIX版】
exec rm -f data >& out

2> filename

cmdnameの標準エラー出力がfilenameで指定したファイルに上書きで書き込まれます。(注2)
“2>”の代わりに“2>>”を使用すると上書きでなく追加で書き込まれます。

【Windows版】
exec cmd /c dir data 2> out
【UNIX版】
exec rm -f data 2> out

注1)

cmdnameの部分が“|”により複数のコマンドからなる場合、読み込みは先頭のコマンドが、書き込みは末尾のコマンドがその対象となります。

注2)

cmdnameの部分が“|”により複数のコマンドからなる場合、すべてのコマンドの標準エラー出力がfilenameで指定したファイルに格納されます。

復帰値

コマンドがフォアグラウンドで実行されている場合:

cmdnameコマンドの標準出力が返されます。このとき、出力テキストの末尾にある改行コードは削除されます。

フロー制御により複数のコマンドが実行される場合は、末尾のコマンドがその対象となります。

また、フロー制御により標準出力がリダイレクトされている場合は、空文字列を返します。

コマンドがバックグラウンドで実行されている場合:

起動コマンドのプロセスIDが返されます。

フロー制御により複数のコマンドが実行される場合は、全プロセスIDが空白で区切って返されます。そのため、アプリケーションが出力する標準出力をexecコマンドの復帰値として獲得することはできません。

その他入出力情報

参照

catch

注意事項

使用例

【Windows版】

dirコマンドを実行し、コマンドの標準出力/標準エラー出力をすべてスクリプトの標準出力へ出力させます。

if {[catch {
          set outmsg [exec cmd /c dir {c:¥tmp¥data}]

          # dirの標準出力(exec戻り値)をスクリプトの標準出力へ
          puts stdout $outmsg
      }]} {
    # 処理例外発生
    # outmsgには初期値として$errorInfoを格納しておきます。
    set outmsg $errorInfo

    # dirの出力情報(errorInfoの末尾2行を除いたもの)をスクリプトの標準出力へ
    regexp {(.*)¥n.*¥n.*} $errorInfo all outmsg
    puts stdout $outmsg
}

【UNIX版】

lsコマンドを実行し、コマンドの標準出力/標準エラー出力をすべてスクリプトの標準出力へ出力させます。

if {[catch {
          set outmsg [exec ls -l /tmp/data]

          # lsの標準出力(exec戻り値)をスクリプトの標準出力へ
          puts stdout $outmsg
      }]} {
    # 処理例外発生
    # outmsgには初期値として$errorInfoを格納しておきます。
    set outmsg $errorInfo

    # lsの出力情報(errorInfoの末尾2行を除いたもの)をスクリプトの標準出力へ
    regexp {(.*)¥n.*¥n.*} $errorInfo all outmsg
    puts stdout $outmsg
}

実行結果/出力形式

標準出力には、以下のように表示されます。

【Windows版】

【UNIX版】