我想要编写一个脚本,首先启动一个程序,然后告诉它执行一堆命令,然后退出。让我们举个例子。
我写了这个脚本myscript.sh
,但它没有按照我想要的方式工作。它所做的只是运行 gnuplot 并等待它退出,然后运行其他命令;这显然会产生错误。
#!/bin/bash
gnuplot
plot sin(x)
pause -1
quit
我想我已经清楚自己想做什么了;如果没有,请在评论中告诉我。
答案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
答案2
从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)"
答案3
正如man
页面,gnuplot
需要从命令文件中输入所谓的批处理会话. 例如,您可以将该行写入文件plot sin(x)
,myplot
然后执行gnuplot myplot
。
如果你省略命令文件(就像你的脚本一样),你将得到一个互动环节。
答案4
此处提到的文档方法对于 Gnuplot 和许多其他程序都非常有用。通过在文档中的 Gnuplot 命令中使用 shell 变量,您可以使用 shell 脚本命令行的输入参数化您的绘图。通过谨慎地设置,您可以从大量“大数据”中批量生成绘图。我曾经使用这种方法在数百次结构动力学有限分析运行中生成了外观一致的散点图,每个图有 20,000 到 80,000 个点。这是一种非常强大的方法。