Warum muss ich 12 Zeichen eingeben, um diese Bash-Befehlszeile zu löschen?

14

Ich öffne ein xterm-Terminal (80 Spalten x 24 Zeilen), führe dann aus $ bash --norc --noprofileund $ ttyerhalte dann den Dateinamen des Terminals: Die Ausgabe ist /dev/pts/9.

Von einem anderen Terminal aus starte ich:

$ printf foo >/dev/pts/9

foowird in der Shell-Befehlszeile im ersten Terminal gedruckt.
Wenn ich C-uzum Ausführen drücke unix-line-discard(Name der Funktion von $ bind -P | grep -i c-u), foowird nicht entfernt.
Wenn ich 11 Leerzeichen einfüge und drücke C-u, werden die Leerzeichen entfernt, aber nicht foo.
Wenn ich 12 Leerzeichen einfüge und drücke C-u, werden auch die Leerzeichen entfernt foo.

Bildbeschreibung hier eingeben

Warum kann ich nicht entfernen, foowenn ich drücke, C-uwährend sich mein Cursor direkt dahinter befindet, und warum muss ich 12 Zeichen eingeben, um es zu entfernen?


Umgebung:

$ 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)
user938271
quelle

Antworten:

19

Wenn ein anderes Programm druckt, fooum die /dev/pts/9Kommunikation zwischen ttys zu ermöglichen, nimmt die Shell nicht am Austausch teil und kann nicht erkennen, wie viele Zeichen gedruckt wurden oder ob Zeichen gedruckt wurden. Die Shell glaubt immer noch, dass es keine Zeichen zum Löschen gibt. Wenn Sie fooauf dem Terminal drucken und versuchen, es mit der Rücktaste zu löschen, funktioniert dies nicht. Die Shell versucht nicht, das zu löschen, von dem sie glaubt, dass es nicht da ist.

Versuchen Sie es in dem Terminal, in dem Sie den Befehl --norc --noprofile verwendet haben:

bash-4.3$ printf 'some text'

bekommen:

some textbash-4.3$

An diesem Punkt löscht die Rücktaste nichts mehr. Auch das ctrl-ulöscht nichts. Wenn Sie einige Zeichen eingeben (bis zu 11 davon), ctrl-uwerden nur die eingegebenen Zeichen entfernt (ebenso wie die Rücktaste). Wenn es jedoch mehr als 11 Zeichen gibt, kehrt der Befehl zu dem ctrl-uzurück, von dem er glaubt, dass er am Anfang der Zeile steht (ein schnellerer Weg, um viele Zeichen zu löschen).

some textb

Das könnte man als Bug IMO bezeichnen (noch in Bash 5.0 vorhanden). Aber Änderungen an 20 (18 für das OP) Zeichen in Bash-5, wenn die --norc --noprofileOptionen nicht verwendet werden (ich habe nicht versucht, den Grund zu finden, kein so wichtiges Problem IMnshO).

Isaac
quelle
Danke für die Antwort. In Bezug auf den zweiten Fehler mit $ printf 'some text'kann ich auf Bash 5.0 reproduzieren, ohne --norc --noprofiledass ich 17 Zeichen oder mehr einfüge.
user938271
@ user938271 Richtig, das Problem wurde für mich mit 20 Zeichen reproduziert. Informationen wurden zur Antwort hinzugefügt. Danke.
Isaac