У меня есть этот сценарий оболочки:
#!/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"
Когда я пытаюсь сгенерировать гистограмму с помощью текстового файла, но получаю следующую ошибку:
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
Вы не можете вложить такие кавычки - либо используйте разные кавычки для оболочки и для 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"
, либо воспользуйтесь другим подходом и используйте здесь документ для передачи команд через стандартный ввод, а не как командную строку -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
Я думаю, вы заново изобретаете скрипты gnuplot. Вы можете использовать «здесь документ», но я бы рекомендовал вам делать это так, как он предназначен: с отдельным скриптом для ваших команд gnuplot. Просто вызовите его с помощью gnuplot myscript
.
См. Также
http://gnuplot.sourceforge.net/demo_5.0/
Если вы делаете это из сценария оболочки, вам нужно точно знать, какие кавычки оболочка «ест» и как вам нужно чтобы избежать кавычек, которые вам действительно нужны для вашего скрипта gnuplot. Сделайте себе одолжение и будьте проще: поместите части gnuplot в отдельный скрипт. Вы даже можете добавить команду gnuplot
как she-bang , которая сообщает системе, с каким интерпретатором вы хотите, чтобы этот сценарий запускался. Просто добавьте первую строку с этим комментарием:
#!/usr/bin/gnuplot
и, конечно же, сделайте скрипт исполняемым ( chmod 755 myscript
).