gpt4 book ai didi

ksh - 如何在期望脚本中刷新输入缓冲区?

转载 作者:行者123 更新时间:2023-12-04 17:59:16 26 4
gpt4 key购买 nike

我正在编写一个 Expect 脚本并且在处理 shell 提示时遇到了麻烦(在 Linux 上)。我的 Expect 脚本生成 rlogin并且远程系统正在使用 ksh .远程系统上的提示包含当前目录,后跟 " > " (空间大于空间)。脚本片段可能是:

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

这适用于简单的命令,但是当我发送的命令超过终端的宽度(或更准确地说, ksh 认为是终端的宽度)时,事情开始出错。在这种情况下, ksh对交互式命令行做了一些奇怪的水平滚动,这似乎重写了提示并在输出中添加了一个额外的“>”。当执行命令后输出中出现多个提示时,这自然会导致 Expect 脚本变得困惑和不同步(我的脚本包含多个 send/ expect 对)。

我试过改变 PS1在远程系统上更改为更独特的内容,例如“提示>”,但出现了类似的问题,这向我表明这不是解决此问题的正确方法。

我认为可能有帮助的是脚本能够告诉 Expect “我知道此时我已与远程系统正确同步,因此现在刷新输入缓冲区”。 expect语句有 -notransfer即使模式匹配也不会丢弃输入缓冲区的标志,所以我想我需要相反的。

是否有任何其他有用的技术可以用来使远程 shell 的行为更可预测?我知道 Expect 进行了大量工作以确保生成的 session 似乎与远程系统具有交互性,但我宁愿使用一些更烦人的交互功能(例如 ksh 的水平滚动)被关闭。

最佳答案

如果你想丢弃目前 Expect 看到的所有输出,请尝试

expect -re $

这是 $ 上的正则表达式匹配,这意味着输入缓冲区的结尾,因此它只会跳过目前收到的所有内容。更多详情请访问 Expect man page .

关于ksh - 如何在期望脚本中刷新输入缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1877015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com