1

我正在开发一个包装库(在 C# 中,但对这里的问题并不重要)来打开 SSH 连接,然后允许向服务器发送命令并接收响应。然而,主要的是,我希望命令调用缓冲响应流,然后在 shell 返回到控制台提示符后将其作为一个字符串全部返回给用户。这样,我可以只触发一个命令,而不必在每次服务器在作业期间写回控制台时处理所有响应事件。

所以,我的主要问题是,在 VT100 会话中,是否有任何万无一失的方法来确定服务器已返回输入提示?到目前为止,我发现的唯一一件事是,对于我尝试过的两个 ssh 服务器(cygwin 和 Fedora),它似乎总是输出的最后一个字符序列是 '[esc][0m' [esc],即 ASCII代码 27 我想这是标准的东西,但是当我查看该序列是什么时,我发现了这个:

modeoff SGR0,关闭字符属性

我有点希望有更具体的东西,比如“等待输入”:P

如果这适用于所有/大多数系统,有什么想法吗?或者如果有更好的方法?

4

1 回答 1

2

字符属性,如粗体、闪烁、暗淡、下划线、突出显示等,都被分配了数字代码,并且可以在转义序列中链接在一起以改变监视器上文本的显示。

ESC [ 0 m序列关闭所有设置,将文本恢复为“正常”,即常规亮度,没有其他视觉属性。

VT100 仅显示从其串行端口输入的字符。因此,提示的构成在很大程度上取决于您将终端连接到什么,并且很可能解释了为什么您没有得到答案。

具有提示的系统通常具有用户可自定义的提示,并且您很可能可以烘焙隐藏的字符序列(如果不是控制字符),然后您可以在会话中检测到这些字符。

另一种方法,虽然不那么可靠,是等待主机不活动的持续时间,这通常意味着它正在等待输入(但并非总是如此)。

于 2010-07-08T21:00:51.777 回答