Cancella / cancella una password invisibile errata su una shell / terminale in Linux


75

Una cosa che mi dà fastidio usando il terminale Linux è quando devo digitare una password invisibile, come quando esegui ssh . A volte scrivo male una o più lettere e poi devo premere il tasto backspace alcune volte per essere sicuro di aver cancellato tutto per ricominciare.

So che questo non è un grosso problema ma poiché l'altro giorno ho scoperto che premendo CTRL + L "cancella" il terminale mi chiedevo se c'è un modo per cancellare / cancellare la password invisibile senza fare affidamento sul backspace o premendo il tasto Invio per riprova.

Risposte:


70

Devi solo digitare ctrl+ u.

Goditi =)


Non l'ho mai saputo. Di solito ctrl + C da un comando indesiderato durante la digitazione.
Spidey,

10
Vedi la mia spiegazione nell'altra risposta se vuoi sapere cosa sta succedendo.
Jim Paris,

Sto usando Ctrl + W e abbastanza bene con esso.
Shabunc,

108

So che è già stata data una risposta, ma la risposta non spiega cosa sta succedendo.

Personaggi come Ctrl+ Lsono gestiti dall'applicazione . Nel caso di immettere input nella shell, come bash, cancella lo schermo. Alcune applicazioni, come emacs, lo usano per ridisegnare lo schermo e / o più recente il cursore.

I caratteri come Ctrl+ Ualla richiesta di una password sono gestiti dalla disciplina della linea TTY . Funzioneranno ogni volta che il terminale di ingresso è in modalità "canonica" di modifica della linea, che è la modalità in cui si trovano i tuoi programmi mentre inserisci una password. In questa modalità, è il kernel Linux stesso a interpretare questi caratteri. Puoi vedere quali funzioni sono assegnate a quali tasti nell'output di 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

Qui puoi vedere che Ctrl+ Uè legato kill, che (secondo la pagina man di stty ) "cancellerà la linea corrente". È inoltre possibile utilizzare sttyper modificare questo mapping:

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

Questa pagina contiene molte informazioni interessanti sul livello TTY se sei interessato.


Se le cose non erano abbastanza confuse: quando ti viene richiesto un sistema interattivo bash, in realtà non sei nella modalità "canonica" di modifica della linea. Invece, bashriceve ogni carattere direttamente mentre lo digiti e interpreta le sequenze di controllo stesse, attraverso la libreria readline . Questa libreria sarà onorare le mappature che hai impostato sul dispositivo terminale, però, in modo da poter ancora utilizzare sttyper cambiarle. In alternativa, è possibile personalizzarli indipendentemente all'interno bashe su altri programmi basati su readline impostando la unix-line-discardproprietà all'interno del ~/.inputrcfile. Vedi la pagina man di bash per maggiori informazioni.

Quando si esegue un programma, bashriattiva la modalità di modifica della linea canonica ( stty icanon) se è stata abilitata in precedenza, quindi la disattiva nuovamente al termine del programma ( stty -icanon).


Grazie, questo mi ha aiutato a rintracciare e risolvere il mio problema di "cancellazione" tilda / yay!
Thomas Hesse il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.