如何在 shell 脚本中使用 gnuplot 命令?

如何在 shell 脚本中使用 gnuplot 命令?

我有这个 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)。

相关内容