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

Когда я пытаюсь сгенерировать гистограмму с помощью текстового файла, но получаю следующую ошибку:

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
0
задан 12 April 2021 в 00:10

2 ответа

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

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

См. Также

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

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

#!/usr/bin/gnuplot

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

0
ответ дан 23 April 2021 в 23:23

Другие вопросы по тегам:

Похожие вопросы: