¿Por qué necesito insertar 12 caracteres para borrar esta línea de comando bash?


14

Abro un terminal xterm (80 columnas x 24 líneas), luego ejecuto $ bash --norc --noprofiley luego $ ttyobtengo el nombre del archivo del terminal: la salida es /dev/pts/9.

Desde otra terminal corro:

$ printf foo >/dev/pts/9

foose imprime en la línea de comandos del shell en el primer terminal.
Si presiono C-upara ejecutar unix-line-discard(nombre de la función dada por $ bind -P | grep -i c-u), foono se elimina.
Si inserto 11 espacios y presiono C-u, los espacios se eliminan pero no foo.
Si inserto 12 espacios y presiono C-u, los espacios también se eliminan foo.

ingrese la descripción de la imagen aquí

¿Por qué no puedo eliminar foocuando presiono C-umientras mi cursor está justo después y por qué debo insertar 12 caracteres para eliminarlo?


Ambiente:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.6 LTS
Release:        16.04
Codename:       xenial

$ bash --version | head -n1
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)

$ xterm -version
XTerm(322)

Respuestas:


19

Cuando algún otro programa se imprime fooen la /dev/pts/9comunicación entre ttys, el shell no participa en el intercambio, no puede saber cuántos caracteres se imprimieron o incluso si se imprimió algún carácter. El caparazón sigue creyendo que no hay caracteres para borrar. De hecho, si imprime fooen el terminal e intenta borrarlo con retroceso, no funciona. El shell no intenta borrar lo que cree que no está allí.

Pruebe en la terminal donde utilizó el comando --norc --noprofile:

bash-4.3$ printf 'some text'

Llegar:

some textbash-4.3$

En ese punto, el espacio de retroceso no borrará nada. Además ctrl-u, no borrará nada. Si escribe algunos caracteres (hasta 11 de ellos) ctrl-ueliminará solo lo que se escribió (al igual que la tecla de retroceso). Pero cuando hay más de 11 caracteres, el comando ctrl-uvolverá a lo que cree que es el comienzo de la línea (una forma más rápida de borrar muchos caracteres) que dejará este mensaje:

some textb

Eso podría considerarse un error de la OMI (todavía presente en bash 5.0). Pero cambia a 20 (18 para el OP) caracteres en bash-5 si --norc --noprofileno se usan las opciones (no he tratado de encontrar la razón, no es un problema tan importante IMnshO).


Gracias por la respuesta. Con respecto al segundo error, con $ printf 'some text', puedo reproducir en bash 5.0 sin --norc --noprofilesi inserto 17 caracteres o más.
user938271

@ user938271 Correcto, el problema se reprodujo para mí con 20 caracteres, información agregada a la respuesta, gracias.
Isaac
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.