如何访问终端状态响应?

时间:2012-08-22 19:35:14

标签: shell scripting terminal term

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

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

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

jessed@joriet-mac ~ » 3;1R

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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