0

http://www.termsys.demon.co.uk/vtansi.htm这个链接有一堆转义码,我写了移动光标和改变颜色的脚本——我很好奇一个是怎么回事以编程方式获得响应?据我所知,这似乎不是标准输出或标准错误,所以我很困惑

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

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

jessed@joriet-mac ~ » 3;1R

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

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

4

1 回答 1

1

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

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

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

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

于 2012-08-22T21:04:44.350 回答