Limpa / apaga uma senha invisível digitada incorretamente em um shell / terminal no Linux

73

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

Eu sei que isso não é grande coisa, mas no outro dia descobri que pressionar CTRL + L "limpa" o terminal Eu queria saber se há uma maneira de limpar / apagar a senha invisível sem depender de retrocesso ou pressionando Digite a chave para tentar novamente.

    
por StackUnder 10.10.2012 / 19:03

2 respostas

65

Você só precisa digitar ctrl + u .

Aproveite =)

    
por 10.10.2012 / 19:16
106

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

Caracteres como Ctrl + L são manipulados pelo aplicativo . No caso de inserir entrada no shell, como bash , ela limpa a tela. Alguns aplicativos, como emacs , o usam para redesenhar a tela e / ou recentrar o cursor.

Caracteres como Ctrl + U em um prompt de senha são tratados pela Disciplina de linha TTY . Eles funcionarão 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 são atribuídas a quais chaves 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 + U está ligado a kill , que (de acordo com o stty man page )" apagará a linha atual ". Você também pode usar stty para alterar este mapeamento:

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

Esta página tem muitas informações importantes sobre a camada TTY se você estiver interessado.

Se as coisas não foram confusas o suficiente: quando no prompt de um bash interativo, você está realmente não no modo de edição de linha "canônico". Em vez disso, bash está recebendo cada caractere diretamente conforme você o digita e interpretando as sequências de controle em si, por meio do readline biblioteca. Essa biblioteca irá honrar os mapeamentos que você definiu no seu dispositivo terminal, portanto, você ainda pode usar stty para alterá-los. Ou, você pode personalizá-los independentemente dentro de bash e outros programas baseados em readline definindo a propriedade unix-line-discard dentro de seu arquivo ~/.inputrc . Veja a página do bash man para mais informações.

Quando você executa um programa, bash reativa o modo de edição de linha canônica ( stty icanon ) se ele foi ativado antes e, em seguida, o desativa novamente quando o programa é concluído ( stty -icanon ).

    
por 10.10.2012 / 21:46