Um das Terminal neu zu initialisieren, genügt ein einfacher reset
wird das beheben. Für weitere Informationen und Optionen man reset
Die Antwort von @James Henstridge auf diese AskUbuntu-Frage scheint den Fehler korrekt zu identifizieren, da das Terminal in einem "Cursor-Adressierungs" -Modus hängen bleibt, was auch immer das bedeutet.
Seine erste Lösung, der Befehl $ tput rmcup
, funktioniert, obwohl es nicht viel Erklärung gibt. Also habe ich versucht, das herauszufinden.
man tput
sagt uns das
Die tput
Dienstprogramm verwendet den terminfo
Datenbank, um der Shell die Werte terminalabhängiger Fähigkeiten und Informationen zur Verfügung zu stellen (siehe sh(1)), das Terminal zu initialisieren oder zurückzusetzen oder den Langnamen des angeforderten Terminaltyps zurückzugeben.
terminfo
ist auch nicht sehr sinnvoll dokumentiert. Die umfassendste Quelle, die ich finden kann, ist ein Artikel auf tldp.org. Offenbar terminfo
ist eine Datenbank mit verschiedenen Terminals und deren Befehlen und Fähigkeiten. Vermutlich hat jede Linux-Installation eine? Sie können also verschiedene Terminals verwenden?
man terminfo
gibt an, dass seine Dateien in /etc/terminfo/*/*
sind , aber auf Ubuntu 16.04 fand ich dort nur eine README. Die echten Dateien sind in /lib/terminfo/*/*
; z.B. /lib/terminfo/l/linux
, die für die meisten Leser wahrscheinlich die relevanteste Datei ist? Ich kann es nicht sagen, da diese Dateien nicht für Menschen lesbar sind. Der oben verlinkte tldp.org-Artikel besagt, dass infocmp
kann verwendet werden, um ihre Quelle zu sehen, aber das ist nicht wahr:
$ infocmp /lib/terminfo/l/linux
infocmp: couldn't open terminfo file /lib/terminfo/l/linux.
Der Artikel erwähnt auch Quellcodedateien /etc/termcap
und /etc/terminfo.src
, aber diese sind in Ubuntu 16.04 nicht vorhanden. Ich habe eine Reihe von /usr/share/vte/termcap*/
gefunden Verzeichnisse, die menschenlesbares xterm
enthalten Dateien. Ich müsste raten, dass dies alles mit dem GNOME-Terminal verbunden ist, das ich verwende, das standardmäßig mit Ubuntu verwendet wird, aber ich bin es leid, herauszufinden, wie.
Die man
Seite für terminfo
hat aber noch ein hilfreiches Jota. Unter seinen 'Predefined Capabilities' befindet sich ein 'Variable String' exit_ca_mode
mit 'capname' ("Funktionsname", nehme ich an) rmcup
mit der Beschreibung strings to end programs using cup
. Die Beschreibung ist nicht sehr hilfreich, aber der Variablenname ist; dies muss sich auf die Fähigkeit eines Terminals beziehen, den 'Cursor Addressing Mode' zu verlassen, in dem das Terminal feststeckt.
Also $ tput rmcup
muss tput
verwenden um auf terminfo
zuzugreifen Datenbank und aktivieren Sie den exit_ca_mode
des aktuellen Terminals Fähigkeit rmcup
, wodurch der Cursor-Adressierungsmodus beendet wird und das Terminal zu seinem normalen Bildlaufverhalten zurückkehrt.