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

Pregunta:

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

Sé que esto no es gran cosa, pero desde que el otro día descubrí que presionar CTRL + L "borra" la 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 Enter para intentar otra vez.

Respuesta:

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

Los caracteres como Ctrl + L son manejados por la aplicación . En el caso de ingresar input en el shell, como bash , borra la pantalla. Algunas aplicaciones, como emacs , lo utilizan para volver a dibujar la pantalla y / o volver a centrar el cursor.

Los caracteres como Ctrl + U en una solicitud de contraseña son manejados por la disciplina de la línea TTY . Funcionarán siempre que el terminal de entrada esté en el modo de edición de línea "canónico", que es el modo en el que se encuentran sus programas mientras ingresa una contraseña. En este modo, es el propio kernel de Linux el que está interpretando estos caracteres. Puede ver qué funciones están asignadas 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 + U está vinculado a kill , lo que (según la página de manual de stty ) "borrará la línea actual". También puede usar stty para cambiar este mapeo:

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 fueran lo suficientemente confusas: cuando se le solicita una bash interactiva, en realidad no está en el modo de edición de línea "canónico". En cambio, bash recibe cada carácter directamente a medida que lo escribe e interpreta las secuencias de control en sí, a través de la biblioteca readline . Esta biblioteca cumplirá con las asignaciones que se ha fijado en su dispositivo terminal, sin embargo, lo que aún puede utilizar stty para cambiarlos. O puede personalizarlos de forma independiente dentro de bash y otros programas basados ​​en readline configurando la propiedad unix-line-discard ~/.inputrc dentro de su archivo ~/.inputrc . Consulte la página del manual de bash para obtener más información.

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

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım