如何找出我的终端为 cat 不会显示的某些特殊代码发送的转义码?

如何找出我的终端为 cat 不会显示的某些特殊代码发送的转义码?

我想知道我的终端为 Ctrl+Backspace 和 Alt+Backspace 发送了什么,执行此操作的标准方法是cat在终端上运行并输入内容通常可以工作,但是对于像这样的某些输出,结果很棘手。

我猜测 Alt+Backspace 正在发送\x1b\x7f(即转义退格键),但是如果我运行cat并键入 Ctrl+V 和 Alt+Backspace,或者只是 Alt+Backspace,会发生什么情况,转义符将被“键入”并且然后立即用退格键将其删除,这样看起来就好像什么也没发生一样。我只有一次通过看到我的计算机渲染了逃生的一帧^[而得到了线索。

到目前为止,我不确定如何计算出 Ctrl+Backspace 发送的内容。即使两者都在 bash 提示符下删除一个单词,它也不是 Ctrl+W,因为在 bash 提示符下cat什么都不做,而 Ctrl+W 删除一个单词!

答案1

只需使用这个命令:

showkey -a

答案2

在 中zsh,与:

$ STTY='raw -echo min 0 time 40' cat -vte
^[^?

或者与bash

$ s=$(stty -g); stty raw -echo min 0 time 40; cat -vte; stty "$s"
^[^?

您将看到终端输入原始输入,因为它发送它并且由 呈现cat -vte。 4 秒(40 分秒)内不输入任何内容即可停止。

例如,您可以替换cat -vteod -An -w1 -tu1 -tx1 -to1 -ta(假设 GNUod或兼容)以十进制、十六进制、八进制或字符形式查看每个字节值。

  27
  1b
 033
 esc
 127
  7f
 177
 del

答案3

我在其他地方发现了一个技巧,可以通过使用 来显示 bash 中的单个字符read -rsn1 key && echo "$key" | xxd。这已经完成了 90%,但我在这个问题上停留了一段时间,因为我只会返回 0x1b(转义),这并不是完整的情况。

然后我将其更改为,read -rsn2 key && echo "$key" | xxd并且这会扩展到转义序列恰好有多少个字符,一点点实验就可以解决问题。所以在我的终端上我有两个都出于方便原因,Ctrl+ 和 Alt+Backspace 过去映射到 0x1b、0x7f(元退格键,如果您愿意的话)。我首先要走这条路,因为我想配置一个新的终端模拟器,让我删除带有两个组合的单词,但只有其中一个有效。 bash 中的bashread -rsn是一个很好的工具,可以进行比cat.

相关内容