在gnuplot中启动交互式会话并在打开时执行一些命令

在gnuplot中启动交互式会话并在打开时执行一些命令

当我执行我的脚本时它应该

  1. 使用 gnuplot 打开终端(交互式会话)
  2. 执行一些 gnuplot 命令。
  3. 交互式会话保持打开状态。(用户可以执行命令)

我已经尝试了-e执行代码的标志,但是终端关闭并且无法交互。

-p标志让情节窗口得以生存,这比我需要的要少。

我还尝试在 -flag 中加载 gnuplot 脚本-e,希望能够启动交互式会话,但无济于事。


我目前的解决方法是使用 发送按键xte,这种方法可行,但有点不方便。有更好的解决方案吗?

答案1

gnuplot -e "print 'here I am'" -

应该管用

答案2

据我所知,以下脚本将执行您所要求的操作。它将以非交互方式运行一系列 gnuplot 命令,然后从命令行继续相同的 gnuplot 会话。脚本中的注释指示了您应该将非交互命令放在哪里。

#!/bin/bash - 

# Cheap 'trick' to show gnuplot prompt
# There are better ways
prmpt () { (echo -n "gnuplot> " >&2) }

# Function that serves as a pipe to gnuplot; 
# non-interactively then interactively
gnuplotInPipe () {
  # simple example from http://gnuplot.sourceforge.net/demo/simple.html
  # All non interactive stuff goes here:
  echo "set title \"Simple Plots\" font \",20\""
  echo "set key left box"
  echo "set samples 50"
  echo "set style data points"
  echo "plot [-10:10] sin(x),atan(x),cos(atan(x))"
  # end of non-interactive gnuplot commands
  (echo "Type 'quit' to exit" >&2)
  prmpt 
  # Here we read in lines (terminated with newline)
  # and pipe them directly to the same gnuplot
  # session
  while true; do
    read -er cmd
    if [ "$cmd" == 'quit' ]; then
      break
    fi
    echo "$cmd"
    prmpt 
  done
}

# Call gnuplotInPipe and pipe it's output
# to gnuplot
gnuplotInPipe | gnuplot 

笔记:

  1. 我用来模拟 gnuplot 提示的方法是一种快速破解方法,毫无疑问可以改进,而且实际上完全没有必要。

  2. 如果这不是您想要做的,请提供您正在从终端运行(已尝试)的命令以及您正在调用的 gnuplot 脚本的足够摘录。

  3. 为了改善这一点,请查看命名管道。如果您想长期维护这样的脚本,出于可维护性原因,我会选择这种方式。此脚本使用更多“强力”方法获得了非常相似的结果。

    例如,为了方便起见,我使用 stderr 来处理不进入 gnuplot 的内容 - 提示符、退出命令信息。使用命名管道可以更好地处理这些内容。

答案3

如果您使用的是 *nix 系统(我使用的是 Linux),那么一切看起来都像文件,这意味着我们可以像读取普通文件一样读取当前终端会话。

我将以下内容放在 gnuplot 脚本的末尾以获取我的终端的名称,并像普通脚本一样“加载”它:

set title 'Interactive session'
plot 'mydata.dat'
etc
tty=system("tty")   # execute the command "tty" in OS and store output
load tty            # load the tty like a file

这样您不会得到任何提示,但对我来说效果很好。您可以继续在终端中输入;按Enter (或Return,或任何行尾键的名称) 会将该行发送到 gnuplot 会话。  Ctrl+D将正常退出会话。

相关内容