gnuplot:スクリプトでシェル変数を設定してから呼び出すことはできますか?

gnuplot:スクリプトでシェル変数を設定してから呼び出すことはできますか?

たとえば、変数を設定するためにgnuplotスクリプトでシェルコマンドを実行できるようにしたいが、そのコマンドはsystemgnuplotスクリプトを実行するシェルインスタンスに対してコマンドを実行するのではなく、新しいシェルインスタンスを作成するようです。最初の行では割り当てを許可し$fooますが、2行目では変数にアクセスできない次のスクリプトを参照してください。この場合、$fooディレクトリへの参照ではなく任意の文字列として割り当てられるため\"

#!/usr/bin/gnuplot -p
system "export foo=\"$HOME/path/to/dir\";echo $foo"
system "echo $foo"
set datafile separator "\t"
#plot "`echo $foo`/bar.dat" using 2:3
plot "<( sed '5p' $foo/bar.dat )" using 2:3

答え1

そうですね。各コマンドはまったく新しいシェルを起動するので、Gnuplotが次の行に移動すると、設定されたsystem変数は消えます。system "foo=bar"

あなたにとって非常に便利な方法は、次のものを使用することです。ここのドキュメント

foo="$HOME/path/to/dir"

gnuplot -p<<EOF
set datafile separator "\t"
plot '<(sed "5p" "$foo"/bar.dat)'
EOF

スクリプトに関するいくつかの注意:

  • sed "5p" fileこれは、ファイル内のすべての行が描画されますが、行5がコピーされることを意味します。 5行目だけを描画するには、次のようにします。sed -n "5p" file

  • これはGnuplotを呼び出しますが、まだシェルスクリプトなので、常に次のことを行うのが最善です。参照変数 (例"$foo":)単語の分割を防ぎます。

関連情報