我在写一个Expect脚本时遇到处理shell提示符(在Linux上)的麻烦。我期待脚本滋生rlogin和远程系统使用的是ksh。远程系统上的提示包含当前目录,随后" > "(空间大于空间)。脚本代码段可能是:

send "some command here\r"
expect " > "

这适用于简单的命令,但事情开始时,我发送命令超出终端的宽度(或者更准确地说,是怎么想ksh是终端的宽度)出问题。在这种情况下,ksh确实交互式命令行,这似乎重写提示,坚持一个额外的一些奇怪的水平滚动“>”的输出。当然,这会导致期望脚本感到困惑和不同步时似乎存在一个以上的提示在输出执行命令之后(我的脚本包含几个send / expect对)。

我试着改变远程系统的东西更独特的像PS1“提示>”,但类似的问题出现这表明,我认为不是解决这个正确的方法。

我在想什么可以帮助是脚本告诉期望的能力。“我知道我在正确的在这一点远程系统同步,所以现在刷新输入缓冲区。”该expect语句具有丢弃即使图案确实匹配输入缓冲器中的-notransfer标志,所以我想我需要的是,相反的。

有没有我可以使用,使远程shell的行为更具有可预见性任何其他有用的技术?据我所知,预计经过大量的工作,以确保所派生的会话出现的 的是交互式的远程系统,但我宁愿是一些比较烦人的交互功能(如ksh的水平滚动)被关闭。

有帮助吗?

解决方案

如果你想扔掉所有输出到目前为止Expect是已经看到了,试试

expect -re $

这是在$一个正则表达式匹配,这意味着输入缓冲器的末端,所以它会只是跳过接收一切为止。在期待男人页面更多细节。

其他提示

您可以尝试“-o设置多行”或列= 1000000(或一些其他适当大的值)。

我曾与KSH困难,在过去的期待。我的解决方案是使用比其他的东西 ksh的用于登录shell。

如果可以比ksh的远程登录变更为其他(使用chsh命令或编辑/ etc / passwd中),那么你可以尝试这与/ bin / sh的作为壳。

另一种替代方法是告诉KSH该终端是一个哑终端 - 从做任何特殊处理禁止它。

$ export TERM=""

可能获得成功。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top