我正在编写一个 Expect 脚本,但无法处理 shell 提示符(在 Linux 上)。我的 Expect 脚本生成rlogin
并且远程系统正在使用ksh
. 远程系统上的提示包含当前目录,后跟" > "
(空格大于空格)。脚本片段可能是:
send "some command here\r"
expect " > "
这适用于简单的命令,但是当我发送的命令超过终端的宽度(或者更准确地说,ksh
认为是终端的宽度)时,事情就开始出错了。在这种情况下,ksh
交互式命令行会进行一些奇怪的水平滚动,这似乎会重写提示并在输出中添加一个额外的“ > ”。当执行命令后输出中出现多个提示时,这自然会导致 Expect 脚本混淆和不同步(我的脚本包含多个send
/expect
对)。
我已经尝试PS1
在远程系统上更改为更独特的内容,例如“prompt>”,但出现了类似的问题,这表明这不是解决此问题的正确方法。
我认为可能有帮助的是脚本能够告诉 Expect “我知道此时我已与远程系统正确同步,所以现在刷新输入缓冲区。” 该expect
语句具有即使模式匹配也不会-notransfer
丢弃输入缓冲区的标志,所以我认为我需要相反的情况。
是否有任何其他有用的技术可用于使远程 shell 的行为更具可预测性?我了解 Expect 进行了大量工作以确保生成的会话似乎与远程系统交互,但我宁愿ksh
关闭一些更烦人的交互功能(例如 的水平滚动) .