Bagaimana cara menjalankan perintah di gnuplot menggunakan skrip shell?

10

Yang ingin saya lakukan adalah menulis skrip yang pertama meluncurkan program dan kemudian mengatakannya untuk mengeksekusi banyak perintah dan kemudian berhenti. Mari kita pergi dengan sebuah contoh.

Saya menulis skrip ini myscript.shdan tidak berfungsi seperti yang saya inginkan. Apa yang dilakukannya hanyalah menjalankan gnuplot dan menunggu sampai berhenti dan kemudian menjalankan perintah lainnya; yang jelas menghasilkan kesalahan.

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

Saya kira jelas apa yang saya coba lakukan; jika tidak, beri tahu saya di komentar.

Mihir Gadgil
sumber

Jawaban:

12

Dari man gnuplotatau manual online-nya :

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

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

Jadi yang mungkin ingin Anda jalankan adalah perintah berikut:

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

Varian lain yang saya usulkan tetapi tidak begitu bermanfaat adalah:

gnuplot -p -e "plot sin(x); pause -1"
gnuplot -e "plot sin(x)"
gnuplot -p -e "plot sin(x)"
Komandan Byte
sumber
2 pertama menghasilkan persis output yang diinginkan. Meskipun -ptidak banyak digunakan dalam contoh ini; jika Anda menekan enter di terminal, gnuplot keluar dan jendela plot menjadi sepenuhnya non-interaktif, kecuali untuk perintah berhenti. Output ke 3 hanya datang dan pergi (tidak terlihat sama sekali). Yang terakhir menghasilkan output, tetapi karena gnuplot segera menutup, jendela plot sekali lagi tidak interaktif (juga, ia menunjukkan plot 1 cm persegi kecil). Jadi pause -1itu perlu.
Mihir Gadgil
@MihirGadgil Terima kasih atas umpan baliknya. Sunting jawaban saya.
Byte Commander
16

Salah satu caranya adalah dengan -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

cara lain, jika Anda perlu memproses data, adalah dengan Bash Here Document(lihat 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
waltinator
sumber
1
Ini (metode shell "di sini-doc") mungkin merupakan jawaban umum yang dicari OP. Ini akan bekerja untuk banyak program berbasis perintah (dan jika tidak, Anda dapat meningkat ke expect...
Rmano
Selain itu Anda dapat membuat executable script dengan chmod u+x myscript.gnudan melaksanakan secara langsung dengan ./myscript.gnu Hanya catatan Anda lupa []di yrange yang: set yrange [$minval:$maxval].
Hastur
3

Seperti yang dijelaskan di manhalaman , gnuplotmengharapkan input dari file perintah dalam apa yang disebut sesi batch . Anda dapat misalnya menulis baris plot sin(x)ke file myplotdan kemudian jalankan gnuplot myplot.

Jika Anda menghilangkan file perintah, seperti halnya skrip Anda, Anda akan mendapatkan sesi interaktif .

Jos
sumber
Oke, saya mengerti bahwa itu melompat ke sesi interaktif, tetapi apakah tidak ada cara untuk memberi makan perintah ke sesi interaktif melalui sctipt yang sama? Juga, dapatkah Anda memberikan jawaban yang lebih umum (tidak khusus untuk gnuplot)? Terima kasih!
Mihir Gadgil
Tidak, tidak semua aplikasi memproses input dengan cara yang sama. Tidak ada cara untuk menggeneralisasi hal itu.
Yos
@MihirGadgil - tidak semua program bekerja dengan cara yang sama ... mana yang ingin Anda gunakan?
Wilf
@ Jo Oh, saya mengerti, terima kasih! Wilf Saya telah menggunakan linux di masa lalu tetapi tidak secara ekstensif, sekarang mencoba untuk belajar lebih banyak. Saya tidak memiliki program seperti itu dalam pikiran; hanya berusaha belajar sebanyak mungkin dari masalah yang satu ini.
Mihir Gadgil
0

Metode di sini-doc yang disebutkan sangat bermanfaat dengan Gnuplot dan dengan banyak program lain juga. Dengan menggunakan variabel shell dalam perintah Gnuplot di sini-doc, Anda dapat membuat parameter plot Anda dengan input dari baris perintah skrip shell Anda. Dengan dengan cerdik mengatur berbagai hal, Anda dapat memproduksi secara massal plot dari kumpulan besar "data besar". Saya biasa menghasilkan plot pencar yang tampak konsisten dengan 20.000 hingga 80.000 poin PER PLOT dalam ratusan analisis dinamika struktural berjalan menggunakan metode ini. Ini metode yang sangat kuat.

Charles
sumber
1
Untuk melengkapi jawaban Anda, dapatkah Anda menambahkan contoh cara menggunakan metode yang disebutkan di sini-doc?
Melebius
0

Ini mungkin bisa membantu

{#set terminal postfile             
{#set output  "d1_plot.ps"        
set title "Energy vs. Time for Sample Data"    
set xlabel "Time"    
set ylabel "Energy"    
plot "d1.dat" with lines   
pause -1 "Hit Enter to continue"

klik di sini untuk lebih jelasnya

lala khan
sumber