Как использовать команды gnuplot внутри сценария оболочки?

У меня есть этот сценарий оболочки:

      #!/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

2 ответа

Я думаю, вы заново изобретаете сценарии gnuplot. Вы можете использовать «здесь документ», но я бы рекомендовал вам сделать это так, как он предназначен для использования: с отдельным скриптом для ваших команд gnuplot. Просто вызовите его с помощью gnuplot myscript.

Смотрите также

http://gnuplot.sourceforge.net/demo_5.0/

Если вы делаете это из сценария оболочки, вам нужно точно знать, какие кавычки оболочка «съедает» и как вам нужно экранировать кавычки, которые вам действительно нужны для вашего сценария gnuplot. Сделайте себе одолжение и будьте проще: поместите части gnuplot в отдельный скрипт. Можно даже добавить gnuplotкоманда как она-бах , которая сообщает системе, с каким интерпретатором вы хотите, чтобы этот сценарий вызывался. Просто добавьте первую строку с этим комментарием:

      #!/usr/bin/gnuplot

и сделать скрипт исполняемым, конечно( chmod 755 myscript).

Вы не можете вкладывать такие кавычки - используйте разные кавычки для оболочки и для 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
Другие вопросы по тегам