Borrar / borrar una contraseña invisible mal escrita en un shell / terminal en Linux

75

Una cosa que me molesta al usar el terminal de Linux es cuando tengo que escribir una contraseña invisible, como cuando ejecuta ssh . A veces escribo mal una o más letras y luego tengo que presionar la tecla de retroceso varias veces para asegurarme de que borré todo para comenzar de nuevo.

Sé que esto no es un gran problema, pero como el otro día descubrí que presionar CTRL + L "borra" el terminal, me preguntaba si hay una manera de borrar / borrar la contraseña invisible sin depender de la tecla de retroceso o presionar la tecla Intro para Inténtalo de nuevo.

StackUnder
fuente

Respuestas:

70

Solo tienes que escribir ctrl+ u.

Disfruta =)

Gilles Quenot
fuente
Nunca supe de eso. Por lo general, simplemente ctrl + C de un comando no deseado a mitad de la escritura.
Spidey
10
Vea mi explicación en la otra respuesta si desea saber qué está pasando.
Jim Paris
Estoy usando Ctrl + W y estoy bastante bien con eso.
shabunc
108

Sé que esto ya fue respondido, pero la respuesta no explica lo que está sucediendo.

Caracteres como Ctrl+ Lson manejados por la aplicación . En el caso de ingresar la entrada en el shell, como bash, borra la pantalla. Algunas aplicaciones, como emacs, lo usan para volver a dibujar la pantalla y / o volver a centrar el cursor.

Los caracteres como Ctrl+ Uen la solicitud de contraseña son manejados por la disciplina de línea TTY . Funcionarán cada vez que el terminal de entrada esté en el modo de edición de línea "canónico", que es el modo en que se encuentran sus programas mientras ingresa una contraseña. En este modo, es el núcleo de Linux mismo el que interpreta estos caracteres. Puede ver qué funciones se asignan a qué teclas en la salida 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

Aquí, puede ver que Ctrl+ Uestá vinculado a kill, que (de acuerdo con la página de manual stty ) "borrará la línea actual". También puede usar sttypara cambiar esta asignación:

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

Esta página tiene mucha información excelente sobre la capa TTY si está interesado.


Si las cosas no eran lo suficientemente confusas: cuando se le solicita un mensaje interactivo bash, en realidad no está en el modo de edición de líneas "canónico". En cambio, bashrecibe cada carácter directamente mientras lo escribe e interpreta las secuencias de control en sí, a través de la biblioteca readline . Esta biblioteca será cumplir las asignaciones que se ha fijado en su dispositivo terminal, sin embargo, por lo que aún se puede utilizar sttypara cambiarlos. O bien, puede personalizarlos de forma independiente dentro de bashotros programas basados ​​en readline configurando la unix-line-discardpropiedad dentro de su ~/.inputrcarchivo. Consulte la página de manual de bash para obtener más información.

Cuando ejecuta un programa, bashvuelve a habilitar el modo de edición de línea canónica ( stty icanon) si estaba habilitado antes, y luego lo deshabilita nuevamente cuando finaliza el programa ( stty -icanon).

Jim Paris
fuente
¡Gracias, eso me ayudó a rastrear y solucionar mi problema de 'borrar' tilda / yay!
Thomas Hesse