在VT100 SSH会话流中检测控制台提示

时间:2010-07-08 12:55:37

标签: ssh terminal-emulator vt100

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

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

  

modesoff SGR0,关闭角色   属性

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

任何想法,如果这应该适用于所有/大多数系统?或者,如果有更好的方法?

1 个答案:

答案 0 :(得分:1)

字符属性,如粗体,闪烁,暗淡,下划线,突出显示等都是指定的数字代码,可以在转义序列中链接在一起,以改变显示器上文本的显示。

ESC [ 0 m序列关闭所有设置,将文本返回“正常”,这是常规亮度,没有其他视觉属性。

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

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

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