![在gnuplot中启动交互式会话并在打开时执行一些命令](https://linux22.com/image/1498799/%E5%9C%A8gnuplot%E4%B8%AD%E5%90%AF%E5%8A%A8%E4%BA%A4%E4%BA%92%E5%BC%8F%E4%BC%9A%E8%AF%9D%E5%B9%B6%E5%9C%A8%E6%89%93%E5%BC%80%E6%97%B6%E6%89%A7%E8%A1%8C%E4%B8%80%E4%BA%9B%E5%91%BD%E4%BB%A4.png)
当我执行我的脚本时它应该
- 使用 gnuplot 打开终端(交互式会话)
- 执行一些 gnuplot 命令。
- 交互式会话保持打开状态。(用户可以执行命令)
我已经尝试了-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
笔记:
我用来模拟 gnuplot 提示的方法是一种快速破解方法,毫无疑问可以改进,而且实际上完全没有必要。
如果这不是您想要做的,请提供您正在从终端运行(已尝试)的命令以及您正在调用的 gnuplot 脚本的足够摘录。
为了改善这一点,请查看命名管道。如果您想长期维护这样的脚本,出于可维护性原因,我会选择这种方式。此脚本使用更多“强力”方法获得了非常相似的结果。
例如,为了方便起见,我使用 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将正常退出会话。