it-swarm.com.de

Wie führe ich Befehle in gnuplot mit einem Shell-Skript aus?

Ich möchte ein Skript schreiben, das zuerst ein Programm startet und es dann anweist, eine Reihe von Befehlen auszuführen und dann zu beenden. Gehen wir mit einem Beispiel.

Ich habe dieses Skript geschrieben myscript.sh und es funktioniert nicht so, wie ich es möchte. Was es tut, ist einfach gnuplot auszuführen und darauf zu warten, dass es beendet wird und dann die anderen Befehle ausführt; was offensichtlich fehler produziert.

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

Ich denke, es ist klar, was ich versuche zu tun; wenn nicht, dann lass es mich in den Kommentaren wissen.

10
Mihir Gadgil

From man gnuplot oder seine Online-Manpage :

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

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

Also, was Sie wahrscheinlich ausführen möchten, ist der folgende Befehl:

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

Andere Varianten, die ich vorgeschlagen habe, die aber nicht so nützlich sind, waren:

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

Eine Möglichkeit ist mit -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

wenn Sie Daten vorverarbeiten müssen, können Sie auch einen Bash Here Document verwenden (siehe 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
14
waltinator

Wie auf den Seiten man erläutert, erwartet gnuplot Eingaben aus einer Befehlsdatei in einer sogenannten Batch-Sitzung . Sie können z. Schreiben Sie die Zeile plot sin(x) in eine Datei myplot und führen Sie dann gnuplot myplot aus.

Wenn Sie die Befehlsdatei weglassen, erhalten Sie wie in Ihrem Skript eine interaktive Sitzung .

3
Jos

Das könnte helfen

{#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"

hier klicken für mehr Details

0
lala khan

Die hier erwähnte doc-Methode ist sehr nützlich für Gnuplot und für viele andere Programme. Indem Sie Shell-Variablen in den Gnuplot-Befehlen in diesem Dokument verwenden, können Sie Ihre Diagramme mit Eingaben über die Befehlszeile Ihres Shell-Skripts parametrisieren. Indem Sie die Dinge geschickt einrichten, können Sie Plots aus riesigen Mengen von "Big Data" in Serie produzieren. Früher habe ich mit genau dieser Methode in Hunderten von strukturdynamischen Finite-Analyse-Durchläufen gleichmäßig aussehende Streudiagramme mit 20.000 bis 80.000 Punkten pro Diagramm erstellt. Es ist eine sehr mächtige Methode.

0
Charles