Abro um terminal xterm (80 colunas x 24 linhas), depois executo $ bash --norc --noprofile
e, em seguida, $ tty
para obter o nome do arquivo do terminal: a saída é /dev/pts/9
.
De outro terminal eu corro:
$ printf foo >/dev/pts/9
foo
é impresso na linha de comando do shell no primeiro terminal.
Se eu pressionar C-u
para executar unix-line-discard
(nome da função dado por $ bind -P | grep -i c-u
), foo
não é removido.
Se eu inserir 11 espaços e pressionar C-u
, os espaços serão removidos, mas não foo
.
Se eu inserir 12 espaços e pressionar C-u
, os espaços serão removidos assim como foo
.
Por que não consigo remover foo
quando pressiono C-u
enquanto meu cursor está logo após e por que preciso inserir 12 caracteres para removê-lo?
Meio 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)
Quando algum outro programa imprime
foo
para a/dev/pts/9
comunicação é entre ttys, o shell não participa da troca, ele não pode saber quantos caracteres foram impressos ou mesmo se algum caractere foi impresso. O shell ainda está acreditando que não há caracteres para apagar. De fato, se você imprimirfoo
no terminal e tentar apagá-lo com backspace, não funcionará. O shell não tenta apagar o que acredita que não está lá.Tente no terminal onde você usou o comando --norc --noprofile:
para obter:
Nesse ponto, o backspace não apagará nada. Além disso, o
ctrl-u
não apagará nada. Se você digitar alguns caracteres (até 11 deles)ctrl-u
irá remover apenas o que foi digitado (assim como o backspace). Mas quando houver mais de 11 caracteres, o comandoctrl-u
voltará ao que acredita ser o início da linha (uma maneira mais rápida de apagar muitos caracteres) que sairá deste prompt:Isso pode ser considerado um bug IMO (ainda presente no bash 5.0). Mas muda para 20 (18 para o OP) caracteres no bash-5 se as
--norc
--noprofile
opções não forem usadas (não tentei encontrar o motivo, não é um problema tão importante IMnshO).