私がやりたいのは、最初にプログラムを起動し、それから一連のコマンドを実行して終了するように指示するスクリプトを書くことです。例を見てみましょう。
このスクリプトmyscript.sh
を作成しましたが、期待どおりに動作しません。 gnuplotを実行して終了するのを待ってから、他のコマンドを実行します。明らかにエラーが発生します。
#!/bin/bash
gnuplot
plot sin(x)
pause -1
quit
私がやろうとしていることは明らかだと思います。そうでない場合は、コメントでお知らせください。
man gnuplot
または そのオンラインマンページ から:
-p, --persist lets plot windows survive after main gnuplot program
exits.
-e "command list" executes the requested commands before loading the
next input file.
したがって、おそらく実行したいのは次のコマンドです。
gnuplot -e "plot sin(x); pause -1"
私が提案したが、それほど有用ではない他のバリアントは次のとおりです。
gnuplot -p -e "plot sin(x); pause -1"
gnuplot -e "plot sin(x)"
gnuplot -p -e "plot sin(x)"
1つの方法は-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
別の方法として、データを前処理する必要がある場合は、Bash Here Document
を使用します(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
man
ページ で説明されているように、gnuplot
は、batchセッションと呼ばれるコマンドファイルからの入力を期待します。できます行plot sin(x)
をファイルmyplot
に書き込んでからgnuplot myplot
を実行します。
スクリプトのようにコマンドファイルを省略すると、インタラクティブセッションが取得されます。
これは役立つかもしれません
{#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"
前述のhere-docメソッドは、Gnuplotおよび他の多くのプログラムでも非常に便利です。 here-docのGnuplotコマンド内でシェル変数を使用すると、シェルスクリプトのコマンドラインからの入力でプロットをパラメーター化できます。気をつけて設定することで、膨大な「ビッグデータ」からプロットを大量に作成できます。正確にこの方法を使用して、数百回の構造ダイナミクスの有限解析を実行して、プロットごとに20,000〜80,000ポイントの一貫した散布図を作成していました。これは非常に強力な方法です。