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
).