Limpar / apagar uma senha invisível digitada incorretamente em um shell / terminal no Linux

75

Uma coisa que me incomoda usando o terminal do Linux é quando eu tenho que digitar uma senha invisível, como quando você executa o ssh . Às vezes, digito errado uma ou mais letras e preciso pressionar a tecla Backspace algumas vezes para ter certeza de que apaguei tudo para começar de novo.

Eu sei que isso não é grande coisa, mas como no outro dia eu descobri que pressionar CTRL + L "limpa" o terminal, eu queria saber se há uma maneira de limpar / apagar a senha invisível sem depender do backspace ou pressionar a tecla Enter para tente novamente.

StackUnder
fonte

Respostas:

70

Você apenas precisa digitar ctrl+ u.

Apreciar =)

Gilles Quenot
fonte
Nunca soube disso. Normalmente, eu apenas pressionava Ctrl + C com um comando indesejado no meio da digitação.
Spidey
10
Veja minha explicação na outra resposta, se você quiser saber o que está acontecendo.
Jim Paris
Estou usando Ctrl + W e estou bem com isso.
shabunc
108

Eu sei que isso já foi respondido, mas a resposta não explica o que está acontecendo.

Caracteres como Ctrl+ Lsão tratados pelo aplicativo . No caso de inserir entrada no shell, como bash, limpa a tela. Alguns aplicativos, como emacs, usam-no para redesenhar a tela e / ou mais recente o cursor.

Caracteres como Ctrl+ Uem um prompt de senha são tratados pela disciplina de linha TTY . Eles funcionam sempre que o terminal de entrada estiver no modo de edição de linha "canônico", que é o modo em que seus programas estão enquanto você digita uma senha. Nesse modo, é o próprio kernel do Linux que interpreta esses caracteres. Você pode ver quais funções estão atribuídas a quais teclas na saída de 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

Aqui, você pode ver que Ctrl+ Uestá vinculado a kill, que (de acordo com a página do manual stty ) "apagará a linha atual". Você também pode usar sttypara alterar este mapeamento:

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

Esta página possui muitas informações excelentes sobre a camada TTY, se você estiver interessado.


Se as coisas não fossem confusas o suficiente: quando no prompt de um interativo bash, na verdade você não está no modo de edição de linha "canônico". Em vez disso, bashestá recebendo cada caractere diretamente enquanto você o digita e interpretando as próprias seqüências de controle, através da biblioteca readline . Esta biblioteca vai honrar os mapeamentos que você definiu no seu dispositivo terminal, embora, assim você ainda pode usar sttypara mudá-los. Ou, você pode personalizá-los independentemente dentro bashe em outros programas baseados em linha de leitura, definindo a unix-line-discardpropriedade dentro do seu ~/.inputrcarquivo. Veja a página de manual do bash para mais informações.

Quando você executa um programa, bashreativa o modo de edição de linha canônica ( stty icanon) se ele estava ativado anteriormente e o desativa novamente quando o programa termina ( stty -icanon).

Jim Paris
fonte
Obrigado, isso me ajudou a rastrear e corrigir o problema do tilda / yay 'apagar'!
Thomas Hesse