Linuxで隠しパスワードプロンプトに入力したすべての文字を削除する方法はありますか?たとえば、サーバにSSH接続すると、入力されたキーが表示されていない場所でパスワードを要求されます。
$ ssh root@somehost
root@somehost's password:
未知の時間バックスペースを押さずに入力したテキストをすべて削除する方法はありますか?私が間違ったものを入力したと思うとき、私はやり直すことを望み、数秒間バックスペースを押すのは面倒です。私は試した Esc、 CtrlA うまくいけばテキスト全体を選択して Home。 CtrlC コマンド全体をキャンセルするので、もう一度コマンドを送信して再試行する必要があります。これはほとんど最善かつ最速の解決策ですが、まだ満足のいくものではありません。私のシェルでも挿入は機能しません。
入力したパスワード全体を削除するには Ctrl+U。
bash
とは異なり、ssh
のパスワードPromptはreadline
.のような特別な端末入力ライブラリを使用しません。
ですから、POSIX TTYは "cooked"モード(rawモードではありません)、つまりカノニカルモードであり、利用可能な唯一の行編集はカーネルによって提供されるものです。 stty(1)
を参照してください。kill = ^U
これはバックスペース文字が定義されている場所でもあります(erase = ^?
)。 blindと入力していないときは、単語消去(^W
)が便利です。
lnext = ^V
は、control-vを入力してから(control-cを含む)何でも入力して、リテラルcontrol-cを取得できることを意味します。
盲目的にやろうとしていたことをデバッグするには、端末のでcat
またはcat > /dev/null
を実行します。ものを入力し、何がうまくいくのか、何が編集できないのかを見てください。
readline
(bash
によって使用されます)は、生の文字を読み取り、ユーザースペースで行編集を行います。ただし、デフォルトのバインディングはデフォルトのTTY制御文字と互換性があります。ただし、どちらも編集機能のサブセットとして提供されています。
readlineは普通のTTYの単純な行編集を超えたものです。 (例えばTTYは行末の文字しか削除できないので、^a
やdelete
や左右の矢印はありません)
bash
がフォアグラウンドでコマンドを実行すると、最初にTTYを正規モードにします(これがデフォルトです)。そのため、(リダイレクトなしで)stty -a
を実行すると、常に標準モードの専用端末が認識されます。しかし、bash
が実行されている他のTTYからの入力をリダイレクトすると、bash + readlineが適用されている端末設定を確認できます。例えば私はその端末でbash
を実行しているので、stty -a < /dev/pts/12
はrawモードの-icanon
を示しています。 (私は別のタブに切り替えてtty
を実行し、それから最初の端末からそのデバイスファイルパスを使いました)。他の端末でcat
を実行した場合、標準モードではicanon
が表示されます。
Related: TTYは解読しました
https://www.gnu.org/software/libc/manual/html_node/Canonical-or-Not.html