Linuxのシェル/端末で入力ミスした不可視のパスワードをクリア/消去します


75

Linuxのターミナルを使用するときに私を悩ます1つのことは、sshを実行するときなど、非表示のパスワードを入力する必要があるときです。時々、1つまたは複数の文字を誤って入力した後、Backspaceキーを数回押して、すべてを消去してから再起動する必要があります。

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

回答:


70

ctrl+ を入力するだけuです。

楽しむ=)


それについて知らなかった。通常は、入力中に不要なコマンドをctrl + Cするだけでした。
-Spidey

10
何が起こっているのか知りたい場合は、他の回答の私の説明を参照してください。
ジム・パリ

私はCtrl + Wを使用していますが、それでかなりOKです。
-shabunc

108

これはすでに回答済みですが、答えは何が起こっているのかを説明していません。

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

パスワードプロンプトでのCtrl+ などの文字Uは、TTY行規則によって処理されます。入力端末が「標準」行編集モードになっているときはいつでも機能します。これは、パスワードを入力しているときにプログラムがどのモードになっているかです。このモードでは、これらの文字を解釈するのは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+ Uがに結び付けられていることがわかりますkillsttyのmanページによると) "現在の行を消去します"。sttyこのマッピングの変更にも使用できます。

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

興味があるなら、このページにはTTYレイヤーに関する多くの素晴らしい情報があります。


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

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


おかげで、チルダ/イェイの「消去」問題を追跡して修正することができました!
トーマスヘッセ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.