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.
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)"
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
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 .
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"
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.