我有这样一个gnuplot脚本(简化)
reset session
set terminal pngcairo enhanced font "Times,25" size 800,400
filename = ifilename
stats filename nooutput
N = STATS_columns
M = STATS_records
set angles degrees
set size square 1.25,1
set output ofilename
# does some stuff
...
...
...
set parametric
plot \
for [i=2:N] filename u (posX($0, column(i))):(posY($0, column(i))) w p ps 1.2 pt 7 lc rgb lcolor(i-2)我想要做的是通过一个shell脚本定义ifilename (输入文件)和ofilename (输出文件)。
因此,我认为-e命令可能就是执行任务的命令。
因此,对于脚本中的gnuploat部分,我将如下所示
gnuplot -e "ifilename='data/points_data1.dat'; ofilename='plot1'" chart.gp但它把错误抛在脑后
"chart.gp" line 8: undefined variable: ifilename它指的是这一行
filename = ifilename我想这可能是因为在解析两个=符号时遇到了一些困难,所以我删除了这一行,并像下面这样重写了shell脚本
gnuplot -e "filename='data/points_data1.dat'; ofilename='plot1'" chart.gp但这一次它抛出了以下错误
"chart.gp" line 8: undefined variable: filename真正起作用的是
echo "data/points_data$i.dat" | gnuplot chart.gp在这里,我将行filename = ifilename替换为
FILE = system("read filename; echo $filename") 以及filename的每个实例,以及FILE在.gp脚本中的应用。
但我不知道如何使用这个语法来定义输出文件。
所以我想知道,是否有更好的方式将shell输入到gnuplot脚本中?
发布于 2019-02-02 16:33:58
FILE = system("read filename; echo $filename") 其实也没问题。
如果您想将输出输送到某个文件,可以省略set output "something.png"。
相反,您可以通过运行这样一个脚本直接将.png输出发送到stdout
#!/usr/bin/env gnuplot
reset session
set terminal pngcairo enhanced font "Times,25" size 800,400
...然后,您可以将输出传输到这样的.png文件中
./chart.gp > mypng.png所以最后的命令应该如下所示
echo "data/points_data$i.dat" | gnuplot chart.gp > plot$i.png发布于 2019-02-02 17:37:52
你原来的命令几乎起作用了。调用
gnuplot -e "ifilename='data/points_data1.dat'; ofilename='plot1'" chart.gp正确定义输入和输出文件名。但是,通过发出命令,您在chart.gp脚本中击溃了它们。
reset session它清除所有变量定义,包括您特别想要的变量定义。从脚本中删除该行,您应该会没事的。如果“重置会话”命令的目的是确保没有使用系统范围的或私有的初始化文件,那么在命令行上用"-d“替换它:
gnuplot -d -e "ifilename='data/points_data1.dat'; ofilename='plot1'" chart.gphttps://stackoverflow.com/questions/54494152
复制相似问题