web-dev-qa-db-fra.com

Comment exécuter des commandes dans gnuplot en utilisant un script shell?

Ce que je veux faire, c'est écrire un script qui lance d'abord un programme, puis lui dit d'exécuter un tas de commandes, puis de quitter. Allons avec un exemple.

J'ai écrit ce script myscript.sh et il ne fonctionne pas comme je le souhaite. Ce qu’il fait est simplement d’exécuter gnuplot et d’attendre qu’il se ferme, puis d’exécuter les autres commandes; ce qui produit évidemment des erreurs.

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

Je suppose que ce que j'essaie de faire est clair. sinon, faites le moi savoir dans les commentaires.

10
Mihir Gadgil

De man gnuplot ou sa page de manuel en ligne :

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

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

Donc, ce que vous voulez probablement exécuter est la commande suivante:

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

Les autres variantes que j'ai proposées mais qui ne sont pas si utiles sont:

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

Une façon est avec -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

si vous devez prétraiter les données, utilisez un Bash Here Document (voir 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
13
waltinator

Comme expliqué dans les pages man , gnuplot attend une entrée d'un fichier de commande dans une session dite . ). Vous pouvez par exemple écrivez la ligne plot sin(x) dans un fichier myplot, puis exécutez gnuplot myplot.

Si vous omettez le fichier de commande, comme le fait votre script, vous obtiendrez une session interactive .

3
Jos

Cela pourrait aider

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

cliquez ici pour plus de détails

0
lala khan

La méthode here-doc mentionnée est très utile avec Gnuplot et de nombreux autres programmes. En utilisant des variables Shell dans les commandes Gnuplot de la documentation, vous pouvez paramétrer vos graphiques avec des entrées issues de la ligne de commande de votre script Shell. En organisant les choses avec facilité, vous pouvez produire en masse des parcelles à partir de vastes réserves de "données volumineuses". Auparavant, je produisais des diagrammes de dispersion homogènes de 20 000 à 80 000 points par parcelle dans des centaines d'analyses finies en dynamique structurelle utilisant exactement cette méthode. C'est une méthode très puissante.

0
Charles