我要做的是编写一个脚本,该脚本首先启动一个程序,然后告诉它执行一堆命令,然后退出。让我们举一个例子。
我写了这个脚本myscript.sh
,它不能按我想要的方式工作。它只是在运行gnuplot并等待其退出,然后运行其他命令。显然会产生错误。
#!/bin/bash
gnuplot
plot sin(x)
pause -1
quit
我想很清楚我要做什么。如果没有,请在评论中让我知道。
我要做的是编写一个脚本,该脚本首先启动一个程序,然后告诉它执行一堆命令,然后退出。让我们举一个例子。
我写了这个脚本myscript.sh
,它不能按我想要的方式工作。它只是在运行gnuplot并等待其退出,然后运行其他命令。显然会产生错误。
#!/bin/bash
gnuplot
plot sin(x)
pause -1
quit
我想很清楚我要做什么。如果没有,请在评论中让我知道。
Answers:
来自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)"
一种方法是-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
expect
...
chmod u+x myscript.gnu
和直接执行./myscript.gnu
只是说明你忘记了[]
在yrange: set yrange [$minval:$maxval]
。
如man
页面中所述,gnuplot
期望在批处理会话中来自命令文件的输入。您可以例如将该行写入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"
-p
在此示例中用处不大;如果在终端中按Enter键,则gnuplot会退出,并且绘图窗口将完全不具有交互性,但quit命令除外。3rd的输出来去去去(完全不可见)。最后一个产生输出,但是由于gnuplot立即关闭,因此图窗口再次是非交互式的(也显示了一个1平方厘米的小图)。因此pause -1
是必要的。