GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash Clear Command Seltsames Verhalten löscht Scrollback Buffer.?

Immer wenn ich in meinem Terminal lösche, löscht es den Scrollback-Puffer vom oberen Rand des Bildschirms bis zur aktuellen Zeile. Ich habe es in xterm, st und urxvt versucht, und das Problem bleibt bestehen. Gibt es eine Möglichkeit, das Verhalten von clear so zu ändern, dass es den Scrollback-Puffer nicht berührt?

Akzeptierte Antwort:

Der Kommentar „vom oberen Bildschirmrand bis zur aktuellen Zeile“ ist mehrdeutig. Wenn Sie vom oberen Rand des sichtbaren Teils meinten des Bildschirms, das ist nicht der Scrollback . Der Scrollback eines Terminals ist der Teil, den Sie nur sehen können, wenn Sie die Scrollbar (oder geeignete Tasten wie Shift Pageup) verwenden.

XTerm Control Sequences dokumentiert die entsprechende Escape-Sequenz:

CSI Ps J  Erase in Display (ED).
            Ps = 0  -> Erase Below (default).
            Ps = 1  -> Erase Above.
            Ps = 2  -> Erase All.
            Ps = 3  -> Erase Saved Lines (xterm).

Die Terminalbeschreibungsfähigkeit clear verwendet das vorletzte, z. B.

clear=E[HE[2J

um den Cursor nach oben links zu positionieren und dann den gesamten (sichtbaren) Bildschirm zu löschen. Sie könnten Verwenden Sie die Option Unten löschen , aber das wird nicht in der Terminalbeschreibung verwendet.

Bezieht sich auf das Löschen des Scrollback :Das ist ein Terminal-spezifisches Feature, ursprünglich eine Escape-Sequenz in xterm (1999, dokumentiert in ctlseqs.ms, aber nicht in Änderungen erwähnt) und später (2011) als Erweiterung für die Linux-Konsole und die entsprechende Terminal-Beschreibung implementiert. Die Terminal-Datenbank listet sie als „Verschiedene Erweiterung“ auf.

Derzeit haben diese Terminalbeschreibungen die Funktion:

  • linux3.0 (der aktuelle Standard für „linux“)
  • Kitt
  • xterm+basic (ein Baustein, der in den meisten „xterm“-Varianten verwendet wird)

Ob es in Xterm-Doppelgängern wie VTE unterstützt wird, müsste durch Testen beantwortet werden (es gibt keine nützliche Dokumentation für VTE oder Konsole).

Wenn Sie die Erweiterung lieber nicht verwenden möchten, können Sie E3 entfernen Fähigkeit aus der Terminalbeschreibung, die Sie verwenden, z. B.

infocmp -1x >foo
edit foo, removing the line with "E3="
tic -x foo

Ich habe vorgeschlagen, die Optionen -1 zu verwenden und -x um die Formatierung zu vereinfachen und die zu ändernde Funktion anzuzeigen. Das Beispiel in https://ghostbin.com/paste/kfsbj stimmt mit diesem Rat überein:

  • der Pfadname /home/flowerpick/.terminfo/x/xterm würde von ncurses verwendet werden
  • die Fähigkeiten AX und XT sind erweiterte Fähigkeiten (wie E3 ), dargestellt mit dem -x Möglichkeit.

Wenn Sie mehr als einen Terminaltyp verwenden, müssen Sie dies für jeden (Wert von $TERM) tun ), und die Änderung gilt nur für den Computer, auf dem Sie clear ausführen . Die ersten paar Zeilen von infocmp Ausgabe zeigen, an welcher Sie gerade arbeiten:

#   Reconstructed via infocmp from file: /home/flowerpick/.terminfo/x/xterm
xterm|xterm terminal emulator (X Window System),

Zum Beispiel uxrvt setzt $TERM zu so etwas wie rxvt-unicode , was Zeilen wie diese in infocmp erzeugt :

#       Reconstructed via infocmp from file: /lib/terminfo/r/rxvt-unicode       
rxvt-unicode|rxvt-unicode terminal (X Window System),

Die st Programm verwendet xterm (oder möglicherweise xterm-256color ), obwohl es schon eine Weile her ist, dass ich eine Kopie davon das gesehen habe was gut genug funktioniert hat, um es zu kommentieren.

Verwandte:Bildschirm leer erzwingen und Eingaben ignorieren?

Übrigens könnten Sie einen Alias ​​für clear haben die die angegebene Escape-Sequenz sendet (ignoriert die Terminalbeschreibung), aber ich habe dies von niemandem gemeldet gesehen.

Wenn Sie „oben löschen“ wollten, ist das nicht so einfach wie die Eingabe von „löschen“. Der Escape-

Linux
  1. So löschen Sie den BASH-Befehlszeilenverlauf in Linux

  2. So löschen Sie den Bash-Verlauf unter Linux

  3. 5 Verwendungen des mv-Befehls im Linux-Terminal

  4. Bash-Exportbefehl

  5. Führen Sie den Bash-Befehl auf der Jenkins-Pipeline aus

Bash las Befehl

Bash Heredoc

Bash-Quellbefehl

Verlaufsbefehl in Linux (Bash-Verlauf)

Bash-printf-Befehl

Bash-Skripting (II)