Shell

CTRL+4(和 CTRL+)在 bash 中有什麼作用?

  • August 10, 2016

我只是偶然發現CTRL+關閉了從命令行 4 讀取輸入的程序。stdin

這就是我 在閱讀程序中鍵入CTRL+4CTRL+時的樣子/``stdin

$ cat
wefwef
wefwef
^\Quit
$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
^\Quit
$

我得到^\Quit顯示,然後程序關閉。^C這與使用or相比有什麼區別^D?做什麼^\Quit

編輯:發現CTRL+\做同樣的事情。

Ctrl+4 發送 ^\

終端發送字元(或更準確地說是字節),而不是鍵。當按下代表可列印字元的鍵時,終端將該字元發送到應用程序。大多數功能鍵被編碼為轉義序列:以字元號 27 開頭的字元序列。Ctrl+形式的一些鍵弦character和一些功能鍵作為控製字元發送 - 在所有現代電腦的ASCII 字元集中用作基礎(Unicode、ISO Latin -n等都是 ASCII 的超集),33 個字元是控製字元:字元編號 0 到 31 和 127。控製字元不可列印,但旨在在應用程序中產生影響;例如字元 10,它是 Control-J(通常寫成 ^J),是一個換行符,所以當終端顯示該字元時,它會將游標移動到下一行,而不是顯示字形。轉義字元本身是一個控製字元,^[(值 27)。

沒有足夠的控製字元來覆蓋所有Ctrl+character鍵弦。只有字母和字元@[\]^_?有對應的控製字元。當您按Ctrl+4Ctrl+ $(我認為是Ctrl+ Shift+ 4)時,終端必須選擇要發送的內容。根據終端及其配置,有幾種常見的可能性:

  • 終端忽略Ctrl修飾符並發送字元4or $
  • 終端發送一個轉義序列,該序列對按下的確切鍵和修飾符進行編碼。
  • 終端發送一些其他控製字元。

許多終端為數字行中的某些鍵發送控製字元:

  • Ctrl+ 2→ ^@
  • Ctrl+ 3→ ^[
  • Ctrl+ 4→ ^\
  • Ctrl+ 5→ ^]
  • Ctrl+ 6→ ^^
  • Ctrl+ 7→ ^_
  • Ctrl+ 8→ ^?

我不知道這個特殊的約定是從哪裡產生的。

Ctrl+|發送相同的字元,因為它是Ctrl+ Shift+\並且終端發送 ^\ 是否按下 shift 鍵。

^\退出

終端本身(更準確地說,核心中的通用終端支持)專門解釋一些控製字元。這種解釋可以配置為映射不同的字元,或者由想要自己處理字元的應用程序關閉。一種眾所周知的解釋是,如果終端處於熟模式Return,則由鍵發送的字元 ^M 將目前行發送到應用程序,其中應用程序逐行接收輸入。

一些字元向前台的應用程序發送信號。^C 發送中斷信號(SIGINT),它通常告訴應用程序停止正在執行的操作並讀取使用者的下一個命令。非互動式應用程序通常會退出。^\ 發送退出信號(SIGQUIT),它通常告訴應用程序盡快退出而不保存任何內容;許多應用程序不會覆蓋預設行為,即立即終止應用程序¹。因此,當您在 or 中按Ctrl+ 4(或發送 ^\ 字元的任何內容)時catbc兩者都不會覆蓋預設行為,應用程序將被終止。

終端本身列印^\消息的一部分:它是您鍵入的字元的視覺描述,並且終端處於熟化模式並打開了回顯(字元在您鍵入後立即由終端顯示,而不是非回顯模式,其中字元僅發送到應用程序,應用程序可能會或可能不會選擇顯示它們)。這Quit部分來自 bash:它注意到它的子程序因退出信號而死亡,這是它讓你知道的方式。

Shell 處理所有常見信號,因此如果您在 shell 中鍵入 ^\,您不會終止會話,您只會得到一個新的提示符,與 ^C 相同。

您可以使用命令玩終端設置stty

¹並且傳統上會生成核心轉儲,但現在許多系統預設禁用它。

引用自:https://unix.stackexchange.com/questions/226327