104 System

書式:
     system "command string"
     ! command string
     output = system("command string")
     show variable GPVAL_SYSTEM

system "command" は、オペレーティングシステムのデフォルトシェルを呼 び出し、そのサブプロセスとして "command" を実行します。関数として system("command") を呼び出した場合は、そのサブプロセスの標準出力から の文字ストリームを文字列として返します。最後に改行がついている場合は、 それは結果文字列からは除去されます。以下も参照: backquotes (p. [*])

そのサブプロセスの終了コードは、変数 GPVAL_SYSTEM_ERRNO と GPVAL_SYSTEM_ERRMSG に保存されます。しかし、もしコマンド文字列が 2 つ 以上のプログラムを呼び出している場合は、そのうちの一つのプログラムがエラーを出しても、"成功" を返す可能性があることに注意してください。例え ば、file = system("ls -1 *.plt | tail -1") は、*.plt ファイルが一つも ない場合でも "成功" が返ります。それは、ls が失敗しても tail は成 功するからです。

システムコマンドは、以下に示すように外部関数を gnuplot に取り入れるのに利用できますが、これはその関数を呼び出す度に別のサブプロセスを強制的に生成することになります。よって、たくさん呼び出す可能性のある関数は、 動的ライブラリからサブルーチンとして直接呼び出す形で取り入れる方がいい でしょう。以下参照: import (p. [*]), plugin.dem (p. [*])


     f(x) = real(system(sprintf("somecommand %f", x)))

竹野茂治@新潟工科大学
2020-04-28