ssh - 在VT100 SSH session 流中检测控制台提示

标签 ssh terminal-emulator vt100

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

因此,我的主要问题是,在VT100 session 中,是否有任何简单的方法来确定服务器已返回到输入提示符?到目前为止,我发现的唯一一件事是,在我尝试使用的两个ssh服务器(cygwin和Fedora)中,它似乎总是输出的最后一个字符序列是'[esc] [0m“[esc],即ASCII代码27我想认为这是标准的,但是当我查看该序列的内容时,会发现:

modesoff SGR0, Turn off character attributes



我有点希望获得更具体的信息,例如“等待输入”:P

有什么想法对所有/大多数系统都适用吗?还是有更好的方法?

最佳答案

字符属性(如粗体,闪烁,暗淡,下划线,突出显示等)均已分配了数字代码,可以按转义序列链接在一​​起,以更改监视器上的文本显示。
ESC [ 0 m序列关闭所有设置,使文本恢复为“正常”,即正常亮度,没有其他视觉属性。

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

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

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

关于ssh - 在VT100 SSH session 流中检测控制台提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3203766/

相关文章:

emacs - 使用 Emacs 通过 SSH 和 Sudo 打开文件

c++ - 如何为 Windows 实现终端仿真器?

java - 快速查找 Java 是否从 Windows cmd 或 Cygwin 终端启动

c -\033 unix 中的提示符

c++ - 你可以使用带有 vt100 转义码的十六进制颜色值 c++

bash - 将 SSH 流作为 Perl 脚本输入而不是物理文件

php - 在从 php 网页调用的 bash 脚本中克隆 git

macos - 在VT100/xterm终端(Mac OS X的终端)中将 "C-("发送到Emacs吗?

Java终端模拟器

python - 在带有 os.system 的 python 脚本中正确使用 ssh 和 sed