Wie löse ich das Problem, dass ein Terminalbildschirm durcheinander geraten ist? (normalerweise nach einer Größenänderung)

75

Manchmal ist ein Terminalbildschirm durcheinander, und wenn wir man lsdie Hilfeseiten lesen oder den Aufwärtspfeil drücken, um zu den vorherigen Befehlen im Verlauf zu gelangen, werden auf dem Bildschirm Zeichen angezeigt, die nicht an der richtigen Stelle angezeigt werden. (Behandeln Sie beispielsweise das Ende des Bildschirms als eine Stelle in der Mitte des Bildschirms.)

Der Befehl resetwird versucht und es würde nicht funktionieren. Eine Möglichkeit besteht darin, sich abzumelden oder das Fenster zu schließen, die Größe des Fensters zuerst zu ändern und dann zu tun ssh(oder diese Registerkarte zu schließen und die Größe des Fensters zu ändern und dann eine neue Registerkarte zu öffnen, um eine neue Shell zu erhalten).

Auf diese Weise verlieren wir jedoch alles, was wir zuvor getan haben, z. B. das Starten einer Konsole einer virtuellen Maschine usw. Wenn wir also die Shell nicht schließen, gibt es eine Möglichkeit, dieses Problem zu beheben?

(Dies geschah zuvor direkt in Fedora und auch für ein Macbook sshin eine RHEL 5.4-Box).

Update: Ich erinnere mich jetzt, wie es in Fedora passiert ist: Ich habe ein Terminal geöffnet und eine FreeVM ausgeführt, um eine Konsole einer virtuellen Maschine (eine Shell) zu verwenden. Ich glaube, es war eine Größe von 80 x 25 und nach einer Weile habe ich die Größe des Terminals ungefähr auf 130 x 50 geändert, und dann hat sich die "innere Hülle" (der VM) merkwürdig verhalten.

Nopole
quelle
Welchen Terminalemulator verwenden Sie? Klingt kaputt, wenn resetdas Problem nicht behoben wird.
Jordan
Was auch immer Terminal-Programm in Fedora ... und das Standard-Terminal-Programm unter Mac OS X Lion.
Nopole
Bitte
lesen
3
Die magische Beschwörung ist ^Jreset^J, wo ^Jdrückt ctrl-J. Oder (auf Grafikterminals) können Sie die ResetSchaltfläche ausprobieren . Außerdem sind einige Programme einfach nicht auf sich ändernde Terminalgrößen vorbereitet (ja, alte Software lebt und funktioniert nicht) oder verhalten sich einfach schlecht, wenn das Terminal zu klein wird.
Vonbrand
1
Meine Probleme waren darauf zurückzuführen, dass ich die Länge der Eingabeaufforderung falsch berechnet habe, weil sie Farbcodes enthielt. Mir fehlten die Escape-Zeichen \ [und \] - siehe unix.stackexchange.com/questions/105958/…
bis

Antworten:

93

Wenn Sie bash verwenden, überprüfen Sie, ob die Option "checkwinsize" in Ihrer Sitzung mit aktiviert wurde

shopt | grep checkwinsize

Wenn Sie nicht bekommen

checkwinsize    on

dann aktiviere es mit

shopt -s checkwinsize

In der Bash-Dokumentation steht für das Attribut "checkwinsize":

Msgstr "Wenn gesetzt, überprüft Bash die Fenstergröße nach jedem Befehl und aktualisiert bei Bedarf die Werte von LINES und COLUMNS."

Wenn Ihnen die Einstellung gefällt, können Sie sie checkwinsizein Ihrem aktivieren ~/.bashrc.

  • Aktivieren: shopt -s checkwinsize
  • So deaktivieren Sie: shopt -u checkwinsize
Arcadien
quelle
6
Das löst mein Problem nicht, aber das ist eine gute allgemeine Antwort, also trotzdem +1. Ich denke, mein Problem hängt mit der Windows-Emulation (?) Zusammen, wenn ich auf einen Linux-Server starte.
Genorama
Zuerst schien es nicht zu funktionieren, als ich Pfeile verwendete, um den Verlauf zu sehen, aber gleich nach dem ersten ausgeführten Befehl wurde alles repariert. In meinem Fall Terminator verwenden. Thanks +1
kstenger
das hat bei mir funktioniert, aber nur durch abschalten von checkwinsize. Aus irgendeinem Grund wurde nach jedem Befehl LINES = 24 gesetzt, obwohl mein Fenster (das eine Picocom-Sitzung enthielt) viel größer war.
Michael
19

Sie können Ctrl+ versuchen L. Je nach Programm wird der Terminalbildschirm gelöscht und / oder neu gezeichnet.

BlueBomber
quelle
3
aber es löst das Problem nicht dauerhaft ...
Neopole
Ich denke ich meinte war, wenn du STRG L drückst, dann ist die Zeile im Moment in
Ordnung
11

Das Hinzufügen dieser Optionen zu Docker Exec schien mein Problem zu lösen

-e COLUMNS=$COLUMNS -e LINES=$LINES -e TERM=$TERM
Oran Agra
quelle
1
Warst du derjenige, der die Frage vor 5 Jahren gestellt hat?
Archemar
3
Ich kann dir sagen, dass er nicht ist: "Docker" passt nicht wirklich zu "vor 5 Jahren". Docker wurde im Januar 2013 noch nicht veröffentlicht
;-)
8

Ich hatte das gleiche Problem und keines der oben genannten Rezepte hat für mich funktioniert, da ich glaube, dass meine Bash niemals die SIGWINCHSignale empfängt , die von ihrem übergeordneten Prozess abgefangen werden.

Ich habe endlich eine Lösung gefunden. Ich fügte hinzu .bashrc:

export PROMPT_COMMAND="resize &>/dev/null ; $PROMPT_COMMAND"

Jedes Mal, wenn ich eine neue Eingabeaufforderung erhalte, wird mein Fenster neu angepasst.

Vielen Dank an UKmonkey für die PROMPT_COMMAND-Verbesserung.

Anthony Scemama
quelle
2
Ich persönlich würde mitgehen, export PROMPT_COMMAND="resize &>/dev/null; $PROMPT_COMMAND"damit der alte Eingabeaufforderungsbefehl, wie auch immer er sein
mag
Ich würde die Größenänderung nur bei Bedarf manuell ausführen. Das Abfragen der Konsole nach der Größe kann langsam sein. Es scheint übertrieben, jeden Befehl auszuführen, und normalerweise wissen Sie, wann die Größe geändert wurde.
Conrad Meyer
6

Ich wollte nur hinzufügen, was Arcadien bereits erwähnt hatte. Die Checkwinsize-Aktivierung macht den Trick, aber für mich war es notwendig, die Größe des Fensters zurückzusetzen, damit es richtig funktioniert. Ich denke, die Checkwinsize sollte dies beseitigen, aber dennoch einen Versuch wert. Versuchen Sie einfach, die Größe des Fensters zu ändern oder die Maximierung aufzuheben und nach dieser Option zu maximieren.

saketrp
quelle
1
Ob Sie es glauben oder nicht, das war alles, was ich brauchte, um es zu reparieren. Komisch, weil ich zuerst alles andere ausprobiert habe.
Taranaki
4

Ich habe von Zeit zu Zeit das gleiche Problem mit zsh unter macOS. Ein einfacher resetBefehlsaufruf richtet das Terminal wieder nach meinen Wünschen ein.

nonocut
quelle
Also erwähnte das OP, dass resetdies für sie nicht funktionierte, und dies war in der Tat der Punkt der Frage ...
Stephen Rauch
OP hat erwähnt, dass es nicht mit Linux-Flavours funktioniert. Ich habe mich dem Problem mit MacOS Sierra gestellt und resetin diesem Fall gearbeitet. Ich habe diese Antwort hinzugefügt, um allen zu helfen, die auf einem MacOS mit dem gleichen Problem konfrontiert sind und keine Kenntnis von resetBefehlen haben.
Nonocut
resetfunktioniert auf Windows Putty mit Ubuntu 16.04!
Musbach
Zurücksetzen auf Ubuntu 16.04
Zsh gearbeitet
2

Ich hatte das gleiche Problem wie Sie und dies ist, was ich getan habe:
Ich habe ein .profileSetup in meinem Benutzer, so dass ich alle meine Änderungen dort vornehme.

Es gibt ein Paket mit dem Namen, xtermdas über erhältlich ist, von dem apt-getich nichts weiß yum. Ich habe jedoch eine lokale Installation von der Quelle aus durchgeführt, da ich keine Installationsberechtigungen habe. LINK: http://invisible-island.net/xterm/#download

./configure --prefix=/the/path/you/want/to/install/to
make
make install

Ich habe den Pfad in mein Profil exportiert und an derselben Stelle aufgerufen

export PATH=$PATH:/the/path/you/want/to/install/to
resize

Jedes Mal, wenn ich mich anmelde, wird die Terminalgröße durch Ändern der Größe entsprechend festgelegt.

Gefaltetes Chromatin
quelle
0

Nun, das ist ein häufiges Problem und es sollte eine einfache Lösung geben.

Wenn andere Maßnahmen wie Strg + A Strg + L nicht funktionieren, versuchen Sie Folgendes stty:

  1. Strg + T: Öffnet eine neue Registerkarte mit einer lokalen Shell.
    Oder: Verlassen Sie den Bildschirm (Strg + AD, um die Verbindung zu trennen) und melden Sie sich von Ihrer SSH-Sitzung ab.
  2. stty -a | grep rows: Ermittelt die Anzahl der Zeilen und Spalten.
    Beispiel:speed 38400 baud; rows 33; columns 133; line = 0;
  3. Kehren Sie zu Ihrer Remote-Registerkarte zurück, oder melden Sie sich an, und ordnen Sie den Bildschirm erneut zu. Die sttyAusgabe sollte unterschiedlich sein.
    Beispiel:speed 38400 baud; rows 47; columns 177; line = 0;
  4. Geben Sie ein stty rows Nund stty columns Nwobei N die "echte" Zahl ist (außerhalb des Bildschirms). Beispiel:$ stty rows 33; stty columns 133

Wenn Sie Terminator verwenden , können Sie die ersten drei Schritte überspringen, da oben die Anzahl der Spalten und Zeilen angezeigt wird.

Sie müssen die Größe Ihrer Terminalfenster nicht ändern, um darauf zugreifen zu können. Administratoren melden sich normalerweise von verschiedenen Computern aus an. Wenn sich die Größe (Auflösung) der angeschlossenen Monitore unterscheidet, hat ein maximiertes Fenster auf jedem Computer eine andere Größe. Es ist eigentlich ziemlich schwierig, nicht häufig darauf zu stoßen.

Und das Ergebnis ist nicht nur, dass manche Manpages nicht richtig angezeigt werden. Es ist so ziemlich alles, was einen Pager benutzt - die ersten paar Zeilen fehlen oft (zum Beispiel). Und denken Sie nicht einmal daran, VIM in einem derart falsch ausgerichteten Terminal einzusetzen. Sie möchten Zeile 3 (V) hervorheben, um sie zu ersetzen. Wenn Sie dies jedoch tun, ist der hervorgehobene Text der einer anderen Zeile.

basic6
quelle
0

Versuchen Sie es stty sane. Es sollte tun, was Sie brauchen.

phil294
quelle