コマンドライン/ターミナルで使用するキーボードショートカットについて話しています。
例: Ctrl+c それはプロセスを殺します、 Ctrl+d そのログアウト、 Ctrl+z プロセスをバックグラウンドに送る...など.
私はいくつかをテストしましたが、どちらもターミナルではないことがわかりました(つまり、gnome-terminal
、xterm
、konsole
)固有でもシェル(つまりbash
、zsh
)固有でもあり、tty
sでも機能します。
だから、私は知りたい:
カーネルのターミナルドライバー(termios
)は、入力してプロセスに信号を送信したり、ファイルの終わりを送信したり、文字を消去したりするために入力できる特殊なキーを解釈します。これは基本的なUnixカーネル機能であり、ほとんどのUNIXおよびLinux実装。
stty
コマンドは、termios
特殊文字、および端末回線ドライバーの他のパラメーターを表示または設定します。
stty -a
を呼び出すと、特殊文字の現在の値とその他の「端末回線設定」が表示されます。次の例では、intr
が Ctrl+C、eof
は Ctrl+D、susp
は Ctrl+Z。 (特殊文字の設定のみを表示するために他の出力を削除しました):
stty -a
GNU/Linuxの特殊文字:
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
FreeBSDのstty -a
特殊文字:
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = ^@; eol2 = ^@;
erase = ^?; erase2 = ^H; intr = ^C; kill = ^U; lnext = ^V;
min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
stop = ^S; susp = ^Z; time = 0; werase = ^W;
特殊文字の値を変更するには、たとえば、割り込み文字を Ctrl+C に Ctrl+Estty
を次のように呼び出します(^E
は文字どおり2文字で、サーカムフレックス(^
)の後に文字E
が続きます):
stty intr '^E'
詳細については、stty
およびtermios
のマニュアルページを参照してください。 GNU/Linuxでは、tty_ioctl
のマニュアルページも参照できます。
メモ:
intr
キー(Ctrl+C デフォルトでは)、実際にはプロセスを強制終了しませんが、カーネルにプロセスグループ内のすべてのプロセスに割り込み信号(SIGINT
)を送信させます。プロセスはシグナルをキャッチまたは無視するように調整できますが、ほとんどのプロセスは終了します。これはデフォルトの動作です。
その理由 Ctrl+d ログアウトするのは、ターミナルラインドライバーがシェルの標準入力でEOF(ファイルの終わり)を送信するためです。シェルは、標準入力でファイルの終わりを受け取ると終了します。
から http://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/ から
Bashには、! (bang)bashコマンドでファンキーなことをすることができます。