在可执行的gnuplot脚本之后切换到终端输入

时间:2017-09-09 04:45:10

标签: unix gnuplot

这是关于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“终端”。 - 改变体验似乎没有用。

1 个答案:

答案 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

enter image description here

您可以将以上内容保存在HOME目录中名为plotandinteract的文件中,然后使其可执行(只需一次):

chmod +x $HOME/plotandinteract

然后你可以用:

运行它
$HOME/plotandinteract SomePlotFile

Tcl/expect可能有一个更优雅的解决方案,但我无法解决这个问题 - 看起来我再次需要@GlennJackman: - )