たとえば、変数を設定するためにgnuplotスクリプトでシェルコマンドを実行できるようにしたいが、そのコマンドはsystem
gnuplotスクリプトを実行するシェルインスタンスに対してコマンドを実行するのではなく、新しいシェルインスタンスを作成するようです。最初の行では割り当てを許可し$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"
:)単語の分割を防ぎます。