web-dev-qa-db-ja.com

Linuxのシェル/ターミナルで誤って入力された非表示のパスワードをクリア/消去する

sshを実行するときのように、Linuxのターミナルを使用して私を困らせることの1つは、見えないパスワードを入力しなければならないときです。ときどき1つ以上の文字を誤って入力してから、Backspaceキーを数回押して、すべてを消去してからやり直すようにしなければなりません。

私はこれは大したことではないことを知っていますが、先日、CTRL + Lを押すと端末が「クリア」されることがわかりました。再試行。

77
StackUnder

入力するだけです ctrl+u

楽しむ=)

75
Gilles Quenot

私はこれがすでに回答されていることを知っていますが、回答は何が起こっているのかを説明していません。

のような文字 Ctrl+Lアプリケーションによって処理されます。 bashのようにシェルに入力を入力する場合、画面をクリアします。 emacsのような一部のアプリケーションは、画面を再描画したり、カーソルを直したりするためにそれを使用します。

のような文字 Ctrl+U パスワードでは、プロンプトは TTY line discipline によって処理されます。これらは、入力端末が「標準的な」行編集モードにあるときはいつでも機能します。これは、パスワードを入力しているときにプログラムが実行されるモードです。このモードでは、これらの文字を解釈しているのはLinuxカーネル自体です。どの関数がどのキーに割り当てられているかは、stty -aの出力で確認できます。

speed 38400 baud; rows 45; columns 128; line = 0;
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;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

ここで、あなたはそれを見ることができます Ctrl+Ukillに関連付けられており、( sttyのマニュアルページ に従って)「現在の行を消去」します。 sttyを使用してこのマッピングを変更することもできます。

stty kill ^E   # make ctrl-e erase the line

このページ 興味がある場合は、TTYレイヤーに関する多くの優れた情報があります。


物事が十分に混乱していなかった場合:インタラクティブbashのプロンプトで、実際には「正規」にいない行編集モード。代わりに、bashは、入力時に各文字を直接受け取り、 readline ライブラリを通じて制御シーケンス自体を解釈します。ただし、このライブラリは、端末デバイスに設定したマッピングを尊重しますので、sttyを使用してそれらを変更できます。または、unix-line-discardファイル内の~/.inputrcプロパティを設定することにより、bashおよびその他のreadlineベースのプログラム内で個別にカスタマイズできます。詳細は bash man page を参照してください。

プログラムを実行すると、bashは、以前に有効にされていた場合は正規行編集モード(stty icanon)を再度有効にし、プログラムが終了すると再び無効にします(stty -icanon)。

110
Jim Paris