Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell GNUPLOT:将数据管道化到GNUPLOT脚本的更好方法_Shell_Gnuplot - Fatal编程技术网

Shell GNUPLOT:将数据管道化到GNUPLOT脚本的更好方法

Shell GNUPLOT:将数据管道化到GNUPLOT脚本的更好方法,shell,gnuplot,Shell,Gnuplot,我有这样一个gnuplot脚本(简化) 我要做的是通过shell脚本定义ifilename(输入文件)和ifilename(输出文件) 因此,我认为-e命令可能正是用于该作业的命令 因此,对于脚本的gnuplot部分,我对此表示愤怒 gnuplot -e "ifilename='data/points_data1.dat'; ofilename='plot1'" chart.gp 但它抛出了错误 "chart.gp" line 8: undefined variable: ifilename

我有这样一个gnuplot脚本(简化)

我要做的是通过shell脚本定义
ifilename
(输入文件)和
ifilename
(输出文件)

因此,我认为
-e
命令可能正是用于该作业的命令

因此,对于脚本的gnuplot部分,我对此表示愤怒

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
#!/usr/bin/env gnuplot

reset session

set terminal pngcairo enhanced font "Times,25" size 800,400
...
./chart.gp > mypng.png
echo "data/points_data$i.dat" | gnuplot chart.gp > plot$i.png
但这次它抛出了以下错误

"chart.gp" line 8: undefined variable: filename

实际上起作用的是这个

echo "data/points_data$i.dat" | gnuplot chart.gp
其中,我将行
filename=ifilename
替换为

FILE = system("read filename; echo $filename") 
以及
.gp
脚本中带有
文件的
文件名的每个实例

但我不确定如何使用该语法来定义输出文件


所以我想知道,有没有更好的方法将shell输入管道化到gnuplot脚本中

FILE = system("read filename; echo $filename") 
事实上很好

如果您想通过管道将输出传输到某个文件,可以省略
set output“something.png”

相反,您可以通过运行这样的脚本将
.png
输出直接发送到
stdout

gnuplot -e "filename='data/points_data1.dat'; ofilename='plot1'" chart.gp
#!/usr/bin/env gnuplot

reset session

set terminal pngcairo enhanced font "Times,25" size 800,400
...
./chart.gp > mypng.png
echo "data/points_data$i.dat" | gnuplot chart.gp > plot$i.png
然后,您可以将该输出通过管道传输到
.png
文件,如下所示

gnuplot -e "filename='data/points_data1.dat'; ofilename='plot1'" chart.gp
#!/usr/bin/env gnuplot

reset session

set terminal pngcairo enhanced font "Times,25" size 800,400
...
./chart.gp > mypng.png
echo "data/points_data$i.dat" | gnuplot chart.gp > plot$i.png
所以最后的命令看起来像这样

gnuplot -e "filename='data/points_data1.dat'; ofilename='plot1'" chart.gp
#!/usr/bin/env gnuplot

reset session

set terminal pngcairo enhanced font "Times,25" size 800,400
...
./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