Як виконати команди в 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.