我希望能够从 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"
)以防止分词。