我有这个 shell 脚本:
#!/usr/bin/bash
gnuplot -e "set terminal png; set output "out.png"; set boxwidth 0.5; set style fill solid; plot "ax.txt" using 1:2:xtic(3) with boxes"
我尝试使用 txt 文件生成条形图,但出现以下错误:
line 0: internal error : STRING operator applied to undefined or non-STRING variable
我的ax.txt的内容是:
1 40 CATS
2 35 DOGS
3 30 FISH
4 25 BIRD
5 20 BLABLA
6 15 TURTLES
7 10 SNAKES
答案1
您不能像这样嵌套引号 - 要么对 shell 和 gnuplot 使用不同的引号:
gnuplot -e "set terminal png; set output 'out.png'; set boxwidth 0.5; set style fill solid; plot 'ax.txt' using 1:2:xtic(3) with boxes"
或者
gnuplot -e 'set terminal png; set output "out.png"; set boxwidth 0.5; set style fill solid; plot "ax.txt" using 1:2:xtic(3) with boxes'
或者转义内部引号:
gnuplot -e "set terminal png; set output \"out.png\"; set boxwidth 0.5; set style fill solid; plot \"ax.txt\" using 1:2:xtic(3) with boxes"
或者采取完全不同的方法,使用这里的文件通过 stdin 而不是命令字符串传递命令-e
:
$ gnuplot <<EOF
set terminal png
set output "out.png"
set boxwidth 0.5; set style fill solid
plot "ax.txt" using 1:2:xtic(3) with boxes
EOF
答案2
我认为你正在重新发明 gnuplot 脚本。你可以使用“此处文档”,但我建议您按照预期的方式进行操作:使用单独的脚本来执行 gnuplot 命令。只需使用 调用它即可gnuplot myscript
。
也可以看看
http://gnuplot.sourceforge.net/demo_5.0/
如果您从 shell 脚本执行此操作,则需要确切知道 shell “吃掉”了哪些引号,以及如何转义 gnuplot 脚本真正需要的引号。帮自己一个忙,保持简单:将 gnuplot 部分放入单独的脚本中。您甚至可以将命令添加gnuplot
为她砰告诉系统您希望使用哪个解释器来调用该脚本。只需在第一行添加以下注释:
#!/usr/bin/gnuplot
当然,还要使脚本可执行(chmod 755 myscript
)。