gnuplot:您可以在脚本中设置 shell 变量然后调用它们吗?

gnuplot:您可以在脚本中设置 shell 变量然后调用它们吗?

我希望能够从 gnuplot 脚本发出 shell 命令,例如设置变量,但该system命令似乎会生成一个新的 shell 实例,而不是向运行 gnuplot 脚本的 shell 实例发出命令。请参阅以下脚本,其中第一行允许分配$foo,但第二行无法访问该变量。在这种情况下,$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

你是对的:每个命令都会发出一个全新的 shell,因此当 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 行。如果您只想绘制第五行,请使用sed -n "5p" file

  • 这调用了 Gnuplot,但仍然是一个 shell 脚本,因此最好始终引用变量 (例如"$foo")以防止分词。

相关内容