Löscht / löscht ein falsch geschriebenes unsichtbares Passwort auf einer Shell / einem Terminal unter Linux


75

Eine Sache, die mich bei der Verwendung des Linux-Terminals stört, ist, wenn ich ein unsichtbares Kennwort eingeben muss, wie wenn Sie ssh ausführen . Manchmal tippe ich einen oder mehrere Buchstaben falsch ein und muss dann einige Male die Rücktaste drücken, um sicherzustellen, dass ich alles gelöscht habe, um von vorne zu beginnen.

Ich weiß, dass dies keine große Sache ist, aber da ich neulich herausgefunden habe, dass das Drücken von STRG + L das Terminal "löscht", fragte ich mich, ob es eine Möglichkeit gibt, das unsichtbare Passwort zu löschen / löschen, ohne auf die Rücktaste zu angewiesen zu sein oder die Eingabetaste zu drücken Versuch es noch einmal.

Antworten:


70

Sie müssen nur ctrl+ eingeben u.

Viel Spaß =)


Ich wusste nie davon. Normalerweise würde ich während der Eingabe eines unerwünschten Befehls einfach Strg + C drücken.
Spidey

10
Sehen Sie meine Erklärung in der anderen Antwort, wenn Sie wissen möchten, was los ist.
Jim Paris

Ich benutze Strg + W und bin damit einverstanden.
Shabunc

108

Ich weiß, dass dies bereits beantwortet wurde, aber die Antwort erklärt nicht, was los ist.

Zeichen wie Ctrl+ Lwerden von der Anwendung verarbeitet . Wenn Sie beispielsweise Eingaben in die Shell basheingeben, wird der Bildschirm gelöscht. Einige Anwendungen emacsverwenden es beispielsweise, um den Bildschirm neu zu zeichnen und / oder den Cursor neu zu zentrieren.

Zeichen wie Ctrl+ Uan einer Passwortabfrage werden von der TTY-Zeilendisziplin behandelt . Sie funktionieren immer dann, wenn sich das Eingabeterminal im "kanonischen" Zeilenbearbeitungsmodus befindet. In diesem Modus befinden sich Ihre Programme, während Sie ein Kennwort eingeben. In diesem Modus interpretiert der Linux-Kernel selbst diese Zeichen. Welche Funktionen welchen Tasten zugeordnet sind, sehen Sie in der Ausgabe von 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

Hier können Sie sehen, dass Ctrl+ an Ugebunden ist kill, was (gemäß der stty-Manpage ) "die aktuelle Zeile löscht". Sie können sttydieses Mapping auch verwenden , um Folgendes zu ändern:

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

Diese Seite enthält viele großartige Informationen über die TTY-Ebene, wenn Sie interessiert sind.


Wenn die Dinge nicht verwirrend genug wären: Wenn Sie an der Eingabeaufforderung eines interaktiven Programms teilnehmen bash, befinden Sie sich tatsächlich nicht im "kanonischen" Zeilenbearbeitungsmodus. Empfängt stattdessen bashjedes Zeichen direkt während der Eingabe und interpretiert die Steuersequenzen selbst über die Readline- Bibliothek. Diese Bibliothek wird die Zuordnungen ehren Sie auf Ihrem Endgerät festgelegt haben, obwohl, so können Sie immer noch verwenden , um sttysie zu ändern. Sie können sie auch unabhängig in bashund in anderen Readline-basierten Programmen anpassen, indem Sie die unix-line-discardEigenschaft in Ihrer ~/.inputrcDatei festlegen. Weitere Informationen finden Sie auf der bash-Manpage .

Wenn Sie ein Programm ausführen, bashwird der kanonische Zeilenbearbeitungsmodus ( stty icanon) wieder aktiviert, sofern er zuvor aktiviert war, und nach Beendigung des Programms wieder deaktiviert ( stty -icanon).


Danke, das hat mir geholfen, mein Tilda / yay 'Erase'-Problem aufzuspüren und zu beheben!
Thomas Hesse
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.