Як виконати команди в gnuplot за допомогою скрипту оболонки?


10

Що я хочу зробити, це написати сценарій, який спочатку запускає програму, а потім каже їй виконати купу команд, а потім вийти. Поїдемо з прикладом.

Я написав цей сценарій, myscript.shі він не працює так, як я хочу. Це - просто запустити gnuplot і дочекатися його завершення, а потім запустити інші команди; що, очевидно, створює помилки.

#!/bin/bash
gnuplot
plot sin(x)
pause -1
quit

Я думаю, зрозуміло, що я намагаюся зробити; якщо ні, то повідомте мені в коментарях.

Відповіді:


12

З man gnuplotабо його онлайн-сторінки :

   -p,  --persist  lets  plot  windows  survive after main gnuplot program
   exits.

   -e "command list" executes the requested commands  before  loading  the
   next input file.

Отже, ви, мабуть, хочете запустити наступну команду:

gnuplot -e "plot sin(x); pause -1"

Інші варіанти, які я запропонував, але які не такі корисні, були:

gnuplot -p -e "plot sin(x); pause -1"
gnuplot -e "plot sin(x)"
gnuplot -p -e "plot sin(x)"

Перші 2 дають саме бажаний вихід. Хоча -pв цьому прикладі немає великої користі; якщо натиснути клавішу enter у терміналі, gnuplot виходить і вікно графіку стає абсолютно неінтерактивним, за винятком команди quit. Вихід 3-го просто приходить і йде (не видно зовсім). Останній отримує вихід, але оскільки gnuplot негайно закривається, вікно сюжету знову не є інтерактивним (також воно показує крихітний графік площею 1 кв. См). Так pause -1треба.
Міхір Ґадгіл

@MihirGadgil Дякую за відгук. Відредагував мою відповідь.
Байт-командир

16

Один із способів -persist:

#!/usr/bin/gnuplot -persist
set title "Walt pedometer" font ",14" textcolor rgbcolor "royalblue"
set timefmt "%y/%m/%d"
set xdata time
set pointsize 1
set terminal wxt  enhanced title "Walt's steps " persist raise
plot "/home/walt/var/Pedometer" using 1:2 with linespoints

інший спосіб, якщо вам потрібно попередньо обробити дані, - за допомогою Bash Here Document(див. man bash):

#!/bin/bash
minval=0    # the result of some (omitted) calculation
maxval=4219   # ditto
gnuplot -persist <<-EOFMarker
    set title "Walt pedometer" font ",14" textcolor rgbcolor "royalblue"
    set timefmt "%y/%m/%d"
    set yrange $minval:$maxval
    set xdata time
    set pointsize 1
    set terminal wxt  enhanced title "Walt's steps " persist raise
    plot "/home/walt/var/Pedometer" using 1:2 with linespoints
EOFMarker
# rest of script, after gnuplot exits

1
Це (метод оболонки "тут-док"), ймовірно, є загальною відповіддю, яку шукав ОП. Він працюватиме для багатьох програм, керованих командами (а якщо ні, ви можете перейти до expect...
Rmano

Крім того, ви можете створювати виконувані сценарії за допомогою chmod u+x myscript.gnuта виконувати безпосередньо за ./myscript.gnu допомогою нотатки, яку ви забули []в yrange : set yrange [$minval:$maxval].
Гастур

3

Як пояснено на manсторінках , gnuplotочікує введення командного файлу в тому, що називається пакетним сеансом . Ви можете, наприклад, написати рядок plot sin(x)у файл, myplotа потім виконати gnuplot myplot.

Якщо ви опустите командний файл, як це робить ваш сценарій, ви отримаєте інтерактивний сеанс .


Гаразд, я розумію, що це перехід на інтерактивну сесію, але чи немає способу подати команди в той інтерактивний сеанс через ту саму скарбницю? Також ви могли б дати більш загальну відповідь (не специфічну для gnuplot)? Дякую!
Міхір Гадгіль

Ні, не всі програми обробляють вхід однаково. Немає способу узагальнити це.
Jos

@MihirGadgil - не всі програми працюють однаково ... які ще ви хочете використовувати?
Вільф

@Jos О, бачу, дякую! Вільф Я раніше використовував Linux, але не широко, зараз намагаюся дізнатися більше. Я не маю на увазі таких програм; просто намагаюся навчитися якнайбільше з цієї однієї проблеми.
Міхір Гадгіл

0

Згаданий тут метод doc дуже корисний як для Gnuplot, так і для багатьох інших програм. Використовуючи змінні оболонки в командах Gnuplot в тут-doc, ви можете налаштувати свої графіки за допомогою входів з командного рядка сценарію оболонки. Завзято налаштувавши речі, ви зможете масово створювати сюжети з величезної кількості «великих даних». Я використовував для створення послідовно виглядаючих ділянок розсіювання з 20 000 до 80 000 балів PER PLOT в сотнях кінцевих структурних динамічних аналізів, що виконуються саме цим методом. Це дуже потужний метод.


1
Щоб відповідь була повною, ви можете додати приклад, як використовувати згаданий метод тут-doc?
Мелебій

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.