DOSEIの日記

技術メモ+日常ログ

gnuplot 4.2 で環境変数を取得する方法 (How to get environmental variables in Gnuplot)

gnuplot 4.2 には環境変数を取り出すコマンドは用意されていない。が、シェルスクリプトで引数を渡して実行したいことがよくある。

temp ファイルを作る

ひとつの方法としては、スクリプトで値を代入するコードをファイルに出力して、それを gnuplot の方で load する。
たとえば、

#!/bin/sh
L="hogehoge"
...
echo L=\"$L\" > temp.gnuplot        # ここで $L は hogehoge に展開されている。
gnuplot run.gnuplot

のようなスクリプトを書いて、 run.gnuplot では

load 'temp.gnuplot'
...

とする。

system コマンドを利用

L = system('echo $L')

system コマンドはシェルコマンドを実行*1し、その標準出力を文字列として返す。ので、クオーテーションは不要。

load コマンドを利用

load コマンドにはシェルコマンドを実行し、その標準出力をコマンドとして実行する機能がある。

load '< echo L = \"$L\"'   # L = "hogehoge" が実行される

この場合、 echo がクオートを解釈しないようにエスケープする。

最初にこっちを思いついたんだけど、 system の方がスマートだった。

システムコマンド置換を利用

L = "`echo $L`"            # L = "hogehoge" に置換されて実行される。

こんな風にもできる。`で囲まれた部分が実行されて、その標準出力に置換される。$L が文字列の場合、さらに全体を " で((' だと置換が実行されないので注意。))クオートしておかないとエラーになる。(そんな変数はないとかなんとか)

結論

やり方は意外とたくさんある。

*1:ようするに spawn