私は偶然にそれを見つけた CTRL + 4 コマンドラインからstdin
入力を読み取るプログラムを閉じます。
これは私がタイプしたときの見え方です CTRL + 4 または CTRL + /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
または^D
を使用する場合との違いは何ですか? ^\Quit
は何をしますか?
編集:それがわかった CTRL + \ まったく同じことをします。
端末はキーではなく文字(より正確にはバイト)を送信します。印刷可能な文字を表すキーが押されると、端末はその文字をアプリケーションに送信します。ほとんどのファンクションキーは、エスケープシーケンス(文字番号27で始まる文字のシーケンス)としてエンコードされます。次の形式のキーコード Ctrl+character、およびいくつかのファンクションキーは、 ASCII文字セット の制御文字として送信されます。これは、最近のすべてのコンピューターがベースとして使用します(Unicode、ISO Latin-) nなどはすべてASCIIのスーパーセットです)、33文字は制御文字です:文字番号0から31および127。制御文字は印刷できませんが、アプリケーションで効果を発揮することを目的としています。たとえば、Control-J(通常^ J)である文字10は改行文字であるため、端末がその文字を表示すると、グリフを表示するのではなく、カーソルを次の行に移動します。エスケープ文字自体は制御文字^ [(値27)です。
すべてをカバーするのに十分な制御文字がありません Ctrl+character キーコード。文字と文字@[\]^_?
のみに対応する制御文字があります。押すと Ctrl+4 または Ctrl+$ (私が推測するのは Ctrl+Shift+4)、端末は送信するものを選択する必要があります。端末とその構成に応じて、いくつかの一般的な可能性があります。
4
または$
を送信します。多くの端末は、数字列のいくつかのキーに制御文字を送信します。
この特定の慣習がどこで発生したのかはわかりません。
Ctrl+| それはので、同じ文字を送信します Ctrl+Shift+\ そして端末はシフトキーが押されたかどうかに関係なく^ \を送信します。
端末自体(より正確には、カーネルの汎用端末サポート)は、いくつかの制御文字を特別に解釈します。この解釈は、さまざまな文字をマップするように構成したり、文字を自分で処理したいアプリケーションによって無効にしたりできます。よく知られているそのような解釈の1つは、^ M、 Return キー。端末が クックドモード の場合、現在の行をアプリケーションに送信します。アプリケーションは1行ずつ入力を受信します。
数文字が signals をフォアグラウンドのアプリケーションに送信します。 ^ Cは 割り込み信号 (SIGINT)を送信します。これは通常、アプリケーションに、実行中の動作を停止してユーザーの次のコマンドを読み取るように指示します。非対話型アプリケーションは通常終了します。 ^ \は 終了信号 (SIGQUIT)を送信します。これは、通常、何も保存せずにできるだけ早く終了するようにアプリケーションに指示します。多くのアプリケーションはデフォルトの動作を上書きしません。つまり、アプリケーションをすぐに強制終了します¹。だからあなたが押すと Ctrl+4cat
またはbc
内の(または^ \文字を送信するものはすべて)デフォルトの動作をオーバーライドしないため、アプリケーションは強制終了されます。
端末自体がメッセージの^\
部分を出力します。これは、入力した文字の視覚的な描写であり、端末はクックモードでエコーがオンになっています(文字は、入力するとすぐに端末に表示されますそれらは、文字がアプリケーションに送信されるだけの非エコーモードとは対照的に、表示するかどうかは選択されません)。 Quit
の部分はbashに由来します。子プロセスがquitシグナルで停止したことに気付き、それがそのことをユーザーに知らせる方法です。
シェルはすべての一般的なシグナルを処理するため、シェルで^ \と入力しても、セッションを終了せず、^ Cと同じ新しいプロンプトが表示されます。
stty
コマンドを使用して、端末設定で遊ぶことができます。
¹ そして伝統的に コアダンプ を生成しますが、多くのシステムは現在デフォルトでそれを無効にしています。
Gillesの回答に加えて、bashに印刷不可能な文字を常に入力できることを付け加えておきます Ctrl-v+key (Ctrl-v+Ctrl+4 この場合)、文字コードを確認します
$ printf '^\' | od -An -tu # input ^\ as C-v C-4
28
文字の10進コードを取得します。これは、man ascii
で確認できるように、ファイル区切り(FS)に対応します。