【问题标题】:How do I access Terminal Status responses? [closed]如何访问终端状态响应? [关闭]
【发布时间】:2012-08-22 19:35:13
【问题描述】:

http://www.termsys.demon.co.uk/vtansi.htm 这个链接有一堆转义码,我编写了移动光标和改变颜色的脚本 - 我很好奇如何以编程方式进行操作,例如在程序或 shell 脚本中得到响应?据我所知,这似乎不是标准输出或标准错误,所以我很困惑

例如在 ZSH 中,我执行以下操作:

jessed@joriet-mac ~ » echo "\e[6n"

jessed@joriet-mac ~ » 3;1R

对查询的响应是作为下一个终端命令来的?我不明白为什么,Bash 似乎也没有表现出这种行为。

我知道还有其他方法可以使用 tput 来做到这一点,但我想在较低的层面上知道发生了什么以及为什么。

【问题讨论】:

    标签: shell terminal scripting


    【解决方案1】:

    响应来自从终端(或终端仿真器)到串行端口(或其他 tty 设备)的通道。这与用于传输在终端键盘上输入的字符相同的通道;没有带外信号。

    由于您在发送查询后没有阅读响应,因此它被您的 shell 解释为一系列按键。不同的 shell 对不寻常的键盘输入有不同的响应。

    要正确读取响应,您必须使终端退出基于行的(“icanon”或“cooked”)模式并一次读取一个字节(从 tty,即可能是 stdin,与您在同一个地方'd 从) 中读取键盘输入,直到找到终止字符。而且没有真正的方法可以将响应与同时发生的任何真实按键区分开来。

    这是一项不干净的业务,如果您尝试在 shell 脚本中执行此操作,则会增加额外的痛苦。

    【讨论】:

    • 非常感谢,这对我的理解很有帮助。
    猜你喜欢
    • 2012-11-02
    • 2021-11-06
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多