Jak wykonywać polecenia w gnuplot przy użyciu skryptu powłoki?


10

Chcę napisać skrypt, który najpierw uruchamia program, a następnie każe mu wykonać kilka poleceń, a następnie zakończyć. Chodźmy z przykładem.

Napisałem ten skrypt myscript.shi nie działa tak, jak chcę. Po prostu uruchom gnuplot i poczekaj, aż zakończy działanie, a następnie uruchom inne polecenia; co oczywiście powoduje błędy.

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

Myślę, że jasne jest, co próbuję zrobić; jeśli nie, daj mi znać w komentarzach.

Odpowiedzi:


12

Z man gnuplotlub na stronie internetowej :

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

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

Więc prawdopodobnie chcesz uruchomić następujące polecenie:

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

Inne warianty, które zaproponowałem, ale które nie są tak przydatne, to:

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

Pierwsze 2 generują dokładnie pożądaną wydajność. Chociaż -pw tym przykładzie nie ma większego zastosowania; jeśli naciśniesz enter w terminalu, gnuplot kończy pracę, a okno wydruku staje się całkowicie nieinteraktywne, z wyjątkiem polecenia quit. Wyjście 3. przychodzi i odchodzi (zupełnie niewidoczne). Ten ostatni generuje dane wyjściowe, ale ponieważ gnuplot natychmiast się zamyka, okno wykresu znów nie jest interaktywne (pokazuje również mały wykres cm kwadratowy). Więc pause -1jest to konieczne.
Mihir Gadgil

@MihirGadgil Dzięki za opinię. Edytowałem moją odpowiedź.
Bajt Dowódca

16

Jednym ze sposobów jest -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

innym sposobem, jeśli potrzebujesz wstępnie przetworzyć dane, jest Bash Here Document(patrz 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
Ta (metoda powłoki „tutaj-doc”) jest prawdopodobnie ogólną odpowiedzią, jakiej szukał OP. Będzie działał dla wielu programów sterowanych poleceniami (a jeśli nie, możesz eskalować do expect...
Rmano

Ponadto można tworzyć wykonywalne skrypty z chmod u+x myscript.gnui wykonać bezpośrednio ./myscript.gnu Tylko uwaga zapomnienia []w yrange: set yrange [$minval:$maxval].
Hastur

3

Jak wyjaśniono na manstronach , gnuplotoczekuje się danych wejściowych z pliku poleceń w tak zwanej sesji wsadowej . Możesz np. Zapisać linię plot sin(x)do pliku, myplota następnie wykonać gnuplot myplot.

Jeśli pominiesz plik poleceń, podobnie jak skrypt, uzyskasz interaktywną sesję .


Ok, rozumiem, że przeskakuje do interaktywnej sesji, ale czy nie ma sposobu, aby podawać polecenia do tej interaktywnej sesji przez ten sam sctipt? Czy mógłbyś również udzielić bardziej ogólnej odpowiedzi (nie specyficznej dla gnuplot)? Dzięki!
Mihir Gadgil

Nie, nie wszystkie aplikacje przetwarzają dane wejściowe w ten sam sposób. Nie da się tego uogólnić.
Jos

@MihirGadgil - nie wszystkie programy działają w ten sam sposób ... z których innych chcesz korzystać?
Wilf

@Jos, rozumiem, dziękuję! Wilf W przeszłości używałem Linuksa, ale nie za dużo, teraz staram się dowiedzieć więcej. Nie mam na myśli żadnych takich programów; po prostu staram się nauczyć jak najwięcej z tego jednego problemu.
Mihir Gadgil

0

Wspomniana tutaj metoda doc jest bardzo przydatna w Gnuplot i wielu innych programach. Używając zmiennych powłoki w poleceniach Gnuplot w niniejszym dokumencie, możesz sparametryzować swoje wykresy za pomocą danych wejściowych z wiersza poleceń skryptu powłoki. Poprzez roztropne konfigurowanie rzeczy możesz masowo produkować wykresy z ogromnej ilości „dużych zbiorów danych”. Kiedyś produkowałem spójnie wyglądające wykresy rozrzutu z 20 000 do 80 000 punktów na poletkę w setkach skończonych analiz dynamiki strukturalnej przy użyciu dokładnie tej metody. To bardzo skuteczna metoda.


1
Aby uzupełnić swoją odpowiedź, czy możesz dodać przykład, jak użyć wspomnianej metody tutaj-doc?
Melebius

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.