这是关于unix like系统的gnuplot脚本问题 对于shell可执行的gnuplot脚本,例如: -
#!/opt/local/bin/gnuplot
如何在脚本末尾的起始终端会话中切换到gnuplot提示符?
添加
load "/dev/stdin"
最后,切换输入,但不提供用户提示。
我想让用户通过脚本生成的设置和后台重新绘制自己的数据,和/或输入其他gnuplot命令。我正在寻找gnuplot中的优雅解决方案。在gnuplot脚本文件中使用#!/opt/local/bin/gnuplot -c
时(在chmod + x之后),我希望./script.gp
的工作方式与gnuplot中call "script.gp"
的工作方式相同。这样我们随后可以在每个案例中的gnuplot提示符replot "info.dat"
。我想在脚本结束时将gnuplot从批处理模式切换到交互式(可能与启动文件的方式一样)。我无法记住或找到命令/技巧(load "/dev/stdin"
已关闭)。
这种情况下的绘图窗口是AquaTerm,gnuplot 5.0 patchlevel 3(macports),终端会话是OS X“终端”。 - 改变体验似乎没有用。
答案 0 :(得分:2)
您想要将一大堆绘图命令从文件发送到 gnuplot ,然后从用户的终端发送大量命令,建议如下:
{ cat plot.gp; while read cmd; do echo "$cmd"; done; } | gnuplot
或者,如果我对此有点充实:
{ cat plot.gp; while :; do >&2 echo -n "gnuplot> "; read -re c; [ "$c" == "quit" ] && break; echo "$c"; done; } | gnuplot
我正在使用此plot.gp
set xrange [-5:5]
plot sin(x),cos(x),x*x
如果您觉得很有趣,那么基本功能可以很多:
#!/bin/bash
gpfile=$1
{
# Show user gnuplot version - on stderr because stdout is going to gnuplot
gnuplot -e "show version" >&2
# Strip shebang (but not comments) from plot commands and send to gnuplot
grep -v "^#!" "$gpfile"
# Show plot commands from file to user - on stderr and prefixed with pseudo-prompt
grep -v "^#!" "$gpfile" | sed 's/^/gnuplot> /' >&2
# Read user input and forward onto gnuplot
while :; do
>&2 echo -n "gnuplot> "
read -re c
[ "$c" == "quit" ] && break
echo "$c"
done
} | gnuplot
您可以将以上内容保存在HOME目录中名为plotandinteract
的文件中,然后使其可执行(只需一次):
chmod +x $HOME/plotandinteract
然后你可以用:
运行它$HOME/plotandinteract SomePlotFile
Tcl/expect
可能有一个更优雅的解决方案,但我无法解决这个问题 - 看起来我再次需要@GlennJackman: - )