我有这样一个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
的每一个实例。
但我不知道如何使用语法来还定义了输出文件。
所以我想知道,是否有管道外壳输入一个更好的方式进入gnuplot的脚本?
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
您原来的命令几乎工作。调用
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.gp