14

I open an xterm terminal (80 columns x 24 lines), then run $ bash --norc --noprofile, and then $ tty to get the file name of the terminal: the output is /dev/pts/9.

From another terminal I run:

$ printf foo >/dev/pts/9

foo is printed on the shell command-line in the first terminal.
If I press C-u to run unix-line-discard (name of the function given by $ bind -P | grep -i c-u), foo is not removed.
If I insert 11 spaces and press C-u, the spaces are removed but not foo.
If I insert 12 spaces and press C-u, the spaces are removed as well as foo.

enter image description here

Why can't I remove foo when I press C-u while my cursor is right after it, and why do I need to insert 12 characters to remove it?


Environment:

$ 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)
19

When some other program prints foo to the /dev/pts/9 the communication is between ttys, the shell doesn't participate in the exchange, it can not be aware of how many characters were printed or even if any character was printed. The shell is still believing that there are no characters to erase. In fact, if you print foo to the terminal and try to erase it with backspace it doesn't work. The shell doesn't try to erase what it believes that is not there.

Try in the terminal where you used the --norc --noprofile command:

bash-4.3$ printf 'some text'

to get:

some textbash-4.3$

At that point the backspace won't erase anything. Also the ctrl-u will not erase anything. If you type some characters (up to 11 of them) ctrl-u will remove only what was typed (as does backspace). But when there are more than 11 characters, the command ctrl-u will go back to what it believes its the beginning of the line (a faster way to erase many characters) which will leave this prompt:

some textb

That could be considered a bug IMO (still present in bash 5.0). But changes to 20 (18 for the OP) characters in bash-5 if the --norc --noprofile options are not used (I have not tried to find the reason, not such an important issue IMnshO).

  • Thank you for the answer. Regarding the second bug, with $ printf 'some text', I can reproduce on bash 5.0 without --norc --noprofile if I insert 17 characters or more. – user938271 Aug 8 at 22:53
  • @user938271 Correct, the issue reproduced for me at 20 characters, info added to the answer, thanks. – Isaac Aug 8 at 23:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.