Ctrl + 4发送^ \
终端发送字符(或更准确地说是字节),而不是键。当按下代表可打印字符的键时,终端会将该字符发送到应用程序。大多数功能键都编码为转义序列:以字符号27开头的字符序列。Ctrl+ 形式的某些character键和一些功能键作为控制字符发送-在ASCII字符集中,这是所有现代计算机都使用的使用为基础(Unicode的,ISO拉丁语ñ等等都是ASCII的超集),33个字符是控制字符:字符数字0到31和127。控制字符不可打印,但打算在应用程序中起作用。例如,字符10(它是Control-J(通常写为^ J))是换行符,因此当终端显示该字符时,它将光标移动到下一行,而不是显示字形。转义字符本身是控制字符^ [(值27)。
没有足够的控制字符来覆盖所有Ctrl+ character琴弦。只有字母和字符@[\]^_?
具有相应的控制字符。当您按Ctrl+ 4或Ctrl+ $(我想是Ctrl+ Shift+ 4)时,终端必须选择要发送的内容。根据终端及其配置,有几种常见的可能性:
- 终端会忽略Ctrl修饰符并发送字符
4
或$
。
- 终端发送一个转义序列,该序列对按下的确切键和修饰符进行编码。
- 终端发送其他控制字符。
许多终端发送数字行中某些键的控制字符:
- Ctrl+ 2→^ @
- Ctrl+ 3→^ [
- Ctrl+ 4→^ \
- Ctrl+ 5→^]
- Ctrl+ 6→^^
- Ctrl+ 7→^ _
- Ctrl+ 8→^?
我不知道这个特殊的约定在哪里出现。
Ctrl+ |发送相同的字符,因为它是Ctrl+ Shift+,\并且无论是否按下Shift键,终端都会发送^ \。
^ \退出
终端本身(更确切地说是内核中的通用终端支持)专门解释一些控制字符。可以将这种解释配置为映射不同的字符,或者由想要自己处理字符的应用程序将其关闭。一种众所周知的解释是,Return键M发送的字符^ M 将当前行发送到应用程序(如果终端处于熟模式),在该模式下,应用程序逐行接收输入。
一些字符将信号发送到前台的应用程序。^ C发送中断信号(SIGINT),该信号通常告诉应用程序停止正在执行的操作并读取用户的下一条命令。非交互式应用程序通常会退出。^ \发送退出信号(SIGQUIT),该信号通常告诉应用程序尽快退出而不保存任何内容;许多应用程序不会覆盖默认行为,即立即终止应用程序¹。所以,当你按下Ctrl+ 4(或任何发送^ \字符)在cat
或者bc
,两者都不覆盖缺省行为,应用程序被杀害。
终端本身会打印^\
消息的一部分:这是对您键入的字符的直观描述,并且终端处于烹饪模式并启用了回显功能(终端会在您键入字符后立即显示字符,而不是非回显模式,其中字符仅发送到应用程序,可能会选择也可能不会选择显示它们。该Quit
部分来自bash:它注意到其子进程因退出信号而死亡,这是让您知道的方式。
外壳程序会处理所有常见信号,因此,如果您在外壳程序中键入^ \,则不会终止会话,您只会得到一个新的提示,与^ C相同。
您可以使用该stty
命令来播放终端设置。
¹ 传统上会生成核心转储,但如今许多系统默认将其禁用。