Wyczyść / usuń źle wpisane niewidoczne hasło w powłoce / terminalu w systemie Linux


75

Jedną z rzeczy, które denerwują mnie przy użyciu terminala Linuksa, jest to, że muszę wpisać niewidoczne hasło, na przykład podczas uruchamiania ssh . Czasami błędnie wpisuję jedną lub więcej liter, a następnie muszę kilka razy nacisnąć klawisz Backspace, aby upewnić się, że wszystko zostało usunięte, aby rozpocząć od nowa.

Wiem, że to nie jest wielka sprawa, ale ponieważ pewnego dnia dowiedziałem się, że naciśnięcie CTRL + L „czyści” terminal, zastanawiałem się, czy istnieje sposób na usunięcie / skasowanie niewidocznego hasła bez polegania na backspace lub naciśnięciu klawisza Enter, aby Spróbuj ponownie.

Odpowiedzi:


70

Musisz tylko wpisać ctrl+ u.

Ciesz się =)


Nigdy o tym nie wiedziałem. Zwykle po prostu ctrl + C z niechcianego polecenia w trakcie pisania.
Spidey,

10
Zobacz moje wyjaśnienie w drugiej odpowiedzi, jeśli chcesz wiedzieć, co się dzieje.
Jim Paris,

Używam Ctrl + W i całkiem dobrze.
shabunc

108

Wiem, że już na nie odpowiedziano, ale odpowiedź nie wyjaśnia, co się dzieje.

Aplikacja obsługuje znaki takie jak Ctrl+ . W przypadku wprowadzania danych wejściowych do powłoki, na przykład , usuwa ekran. Niektóre aplikacje, na przykład , używają go do przerysowania ekranu i / lub wyśrodkowania kursora.Lbashemacs

Znaki takie jak Ctrl+ Uw pytaniu o hasło są obsługiwane przez dyscyplinę linii TTY . Będą działać za każdym razem, gdy terminal wejściowy znajdzie się w „kanonicznym” trybie edycji linii, czyli w jakim trybie znajdują się twoje programy podczas wprowadzania hasła. W tym trybie to samo jądro Linuksa interpretuje te znaki. Możesz zobaczyć, jakie funkcje są przypisane do których klawiszy na wyjściu 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

Tutaj możesz zobaczyć, że Ctrl+ Ujest przywiązany kill, co (zgodnie ze stty man page ) „usunie bieżącą linię”. Możesz także użyć sttydo zmiany tego mapowania:

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

Ta strona zawiera wiele świetnych informacji o warstwie TTY, jeśli jesteś zainteresowany.


Jeśli rzeczy nie były wystarczająco mylące: kiedy pojawi się monit interaktywny bash, tak naprawdę nie jesteś w „kanonicznym” trybie edycji linii. Zamiast tego bashodbiera każdy znak bezpośrednio podczas pisania i interpretuje same sekwencje kontrolne za pośrednictwem biblioteki readline . Ta biblioteka będzie honorować odwzorowania ustawione na urządzeniu końcowym, więc nadal możesz sttyich zmieniać. Możesz też dostosować je niezależnie wewnątrz bashi innych programów opartych na readline, ustawiając unix-line-discardwłaściwość w ~/.inputrcpliku. Zobacz stronę podręcznika użytkownika bash, aby uzyskać więcej informacji.

Po uruchomieniu programu bashponownie włącza tryb edycji linii kanonicznej ( stty icanon), jeśli był wcześniej włączony, a następnie wyłącza go ponownie po zakończeniu programu ( stty -icanon).


Dzięki, że pomogłem mi wyśledzić i naprawić problem „kasowania” tilda / yay!
Thomas Hesse,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.