【问题标题】:switch to terminal input after executable gnuplot script在可执行 gnuplot 脚本后切换到终端输入
【发布时间】:2018-02-18 00:17:47
【问题描述】:

这是一个关于类 unix 系统的 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 “Terminal”。 --persist 似乎对改变体验没有帮助。

【问题讨论】:

标签: unix gnuplot


【解决方案1】:

你想从一个文件向 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 :-)

【讨论】:

  • 我印象深刻!但是,我正在 gnuplot 中寻找一种解决方案,该解决方案可能适用于 unix 上的 shebang 和其他系统上的 guplot>call "script.gp"
  • 我的脚本的最后一个增强版本适用于包含shebang的脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
  • 2021-10-01
  • 2017-09-13
  • 1970-01-01
  • 2021-01-08
  • 2017-05-02
  • 1970-01-01
相关资源
最近更新 更多