为什么我不能从键盘发送转义序列,但可以从另一个 tty 发送?

Min*_*Max 3 terminal tty escape-characters

我试图通过执行不同的技巧来了解终端的工作方式,例如从一个 tty 写入另一个 tty,tty1从更改设置tty2等。此外,我试图通过直接从键盘发送转义序列来更改颜色。也就是说,不是通过echo -e '\e[0;31m'命令,而是通过直接键盘输入。它不起作用。

我执行以下步骤:

  1. 打开tty1tty2
  2. tty2bash进入睡眠模式,通过sleep 10m。输入单词“一”。

在此处输入图片说明

  1. tty1,做echo -n ^[[0;31m > /dev/tty2。第一个字符^[是这样输入的Ctrl+v Esc
  2. 返回到tty2,输入单词“二”。是 - 颜色已被另一个 tty 的命令更改为红色。

在此处输入图片说明

  1. 重复步骤 3,4,但使用绿色和单词“三”

在此处输入图片说明

  1. 最后,我想没有另一个发送转义序列tty,而是直接用电脑键盘-通过打字^[[0;37mtty2。我以同样的方式做所有事情 - EscCtrl+v不需要,因为 readline 正在睡觉),然后[0;37m,但是得到这个:

在此处输入图片说明

问题: 为什么会这样?所有字符都相同,终端状态相同,但在一种情况下终端会获得转义序列,而在另一种情况下则不会。


编辑

这个问题在这里得到了回答:回声转义序列不会在 Linux tty 中解释

Gil*_*il' 5

当您运行时echo,您将输出发送到终端。终端解释转义序列,例如改变发送给它的输出中的颜色的转义序列。这些转义序列旨在由应用程序发送,这就是为什么它们在来自终端中运行的应用程序的输出中被识别的原因。通常,在终端中运行的应用程序是由终端模拟器(您的 shell)启动的应用程序,echo … >/dev/tty2然后由它依次启动的应用程序,但是如果您运行,那么echo实际上是“在终端中运行”(从某种意义上说,它的输出正在运行)到终端,这在这里很重要)。

当您按Esc [等时,您正在向终端发送输入。终端不会解释转义序列,例如改变它接收到的输入中的颜色的转义序列。终端确实会解释输入中的转义序列,但用于完全不同的目的:它们是一种对功能键按下进行编码的方法。

键盘输入和文本输出如何工作?有一些相关的背景。