Как использовать команды 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