it-swarm.com.de

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

Ich öffne ein xterm-Terminal (80 Spalten x 24 Zeilen), führe dann $ bash --norc --noprofile Und dann $ tty Aus, um den Dateinamen des Terminals zu erhalten: Die Ausgabe ist /dev/pts/9.

Von einem anderen Terminal aus starte ich:

$ printf foo >/dev/pts/9

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

(enter image description here

Warum kann ich foo nicht entfernen, wenn ich C-u Drücke, während sich mein Cursor direkt dahinter befindet, und warum muss ich 12 Zeichen einfügen, um ihn 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)
14
user938271

Wenn ein anderes Programm foo auf das /dev/pts/9 Die Kommunikation findet zwischen ttys statt. Die Shell nimmt nicht am Austausch teil. Sie kann nicht wissen, wie viele Zeichen gedruckt wurden oder ob Zeichen gedruckt wurden. Die Shell glaubt immer noch, dass es keine zu löschenden Zeichen gibt. Wenn Sie foo auf dem Terminal drucken und versuchen, es mit der Rücktaste zu löschen, funktioniert dies nicht. Die Shell versucht nicht zu löschen, was ihrer Meinung nach nicht vorhanden 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$

Zu diesem Zeitpunkt löscht die Rücktaste nichts. Auch die ctrl-u löscht nichts. Wenn Sie einige Zeichen eingeben (bis zu 11 davon) ctrl-u entfernt nur das, was eingegeben wurde (ebenso wie die Rücktaste). Bei mehr als 11 Zeichen wird der Befehl ctrl-u kehrt zu dem zurück, von dem es glaubt, dass es der Anfang der Zeile ist (ein schnellerer Weg, um viele Zeichen zu löschen), wodurch diese Eingabeaufforderung verlassen wird:

some textb

Das könnte als Fehler IMO angesehen werden (immer noch in Bash 5.0 vorhanden). Ändert sich jedoch in Bash-5 auf 20 (18 für das OP) Zeichen, wenn --norc--noprofile Optionen werden nicht verwendet (ich habe nicht versucht, den Grund zu finden, kein so wichtiges Problem IMnshO).

19
Isaac