Wie speichere ich GNOME Terminal-Inhalte mit ANSI-Escape-Codes?

9

VT100 - Terminals hat eine relativ einfache Art und Weise zu Terminal Inhalte mit Escape - Codes in eine Datei zu speichern verwenden Meta- p:

XTerm.VT100.printAttributes: 2
XTerm.VT100.printerCommand: cat - > file
XTerm.VT100.translations: #override Meta <KeyPress> P: print() \n

Ich habe mich ziemlich viel umgesehen und kann keine Lösung dafür finden, die im Standard-GNOME-Terminal + XTerm + Bash funktioniert.

Ich möchte nicht nur ein Bild mit dem Inhalt des Fensters.

Es sieht so aus, als würde GNOME Terminal möglicherweise irgendwann eine Lösung dafür finden , aber es gibt keine Informationen darüber, in welcher Version es enthalten sein wird, und seit dem letzten Update sind fast drei Jahre vergangen ...

l0b0
quelle
Leider gibt es einfach keine Möglichkeit, dies zu tun. Siehe: askubuntu.com/q/20739
Zaz
@ Josh Ich denke nicht, dass das die gleiche Frage ist. Ich möchte nicht alle Ausgaben eines Befehls speichern, sondern alle sichtbaren Ausgaben im Terminalfenster.
10b0

Antworten:

3

Leider lautet die Antwort sofort: Dies ist nicht möglich.

In meiner anderen Antwort habe ich aufgeführt, wie das Skript verwendet wird, obwohl es einige Unterschiede gibt, wie Sie bemerkt haben. Die andere Möglichkeit besteht darin, die Quelle zu kompilieren oder eine instabile Version zu verwenden.

Gnome Terminal Source Tarball

Die Version in Raring ist 3.6.1, Sie können sich also diese Quelle ansehen. Innerhalb von Terminal-window.c in Zeile 115:

/*
 * We don't want to enable content saving until vte supports it async.
 * So we disable this code for stable versions.
 */

#include "terminal-version.h"

#if (TERMINAL_MINOR_VERSION & 1) != 0
#define ENABLE_SAVE
#else
#undef ENABLE_SAVE
#endif
#endif

Optionen:

  1. Fügen Sie darunter #define ENABLE_SAVE hinzu.
  2. Ändern Sie die Version in eine instabile.
  3. Laden Sie eine instabile Version der .DEB herunter.

Hoffe das hilft.

LimpingNinja
quelle
Speichert dies die ANSI-Escape-Schlüssel oder nur den Text?
10b0
Ich habe überprüft, und vte_terminal_write_contents () scheint keine ANSI-Codes zu schreiben. Im Moment ist meine ursprüngliche Antwort die genaueste: "Was Sie wollen, ist nicht möglich (sofort einsatzbereit)." Wenn Sie entwicklerorientiert sind, können Sie die Funktion wahrscheinlich in termainal-window.c umschreiben. C 3340 save_contents_dialog_on_response (...) In Zeile 3372 sehen Sie, wo der Aufruf von vte_terminal_write_contents erfolgt. Ich werde nicht weiter gehen, da dies den Rahmen dieser Website sprengt. Andere Terminals bieten dies zu weitaus geringeren Kosten als das Neukompilieren Ihrer Dienstprogramme.
LimpingNinja
+100. Wenn möglich, würde ich es zwischen dieser und Ihrer anderen Antwort aufteilen, da beide 90% von dem tun, was ich will.
10b0
3

Leider lautet die Antwort sofort: Dies ist nicht möglich.

Es gibt zwei Möglichkeiten, wie Sie versuchen können, dies zu korrigieren, indem Sie jederzeit ein Skript auf Ihrem Terminal ausführen und alle Ausgaben protokollieren. Öffnen Sie das Gnome-Terminal, gehen Sie zu Bearbeiten -> Profileinstellungen , dann zur Registerkarte Titel und Befehl und verwenden Sie für Ihren benutzerdefinierten Befehl Folgendes:

bash -l -c 'script -q -c bash $HOME/sessionlogs/$BASHPID.sessionlog.$(date +%Y%m%d-%H%M).txt'

Stellen Sie sicher, dass unter $ HOME 'Sessionlogs' vorhanden sind.

Der andere Weg wurde entfernt und als zweite Antwort auf diese Frage hinzugefügt.

LimpingNinja
quelle
In der Tat wurde die Antwort korrigiert, um den Tippfehler zu beheben, der während einer Wiederholung aufgetreten ist. Ich trenne auch die Option "Neukompilieren" aus, da ich der Meinung bin, dass die beiden nicht miteinander zusammenhängen.
LimpingNinja
less -rzeigt tatsächlich die Ausgabe wie gedruckt - Danke!
10b0
0

Sie können Ihre Shells über das Skript (1) ausführen , um alle Ein- und Ausgaben des Terminals in einer Datei zu speichern, einschließlich Terminal-Escapezeichen.

Geirha
quelle
1
Das ist ein anderer Anwendungsfall. scriptkann nicht verwendet werden, um Inhalte nachträglich zu speichern, und es wird nicht einfach die sichtbare Ausgabe gespeichert .
10.
1
Bist du sicher? Es stimmt, es kann keine Skripte nachträglich speichern, aber als ich dies getestet und einige Dateiberechtigungen damit ausgegeben llhabe, wurde die gesamte Ausgabe gespeichert.
Matt
0

Es gibt ein Paket namens screen - einen Terminal-Multiplexer mit VT100 / ANSI-Terminal-Emulation.

Gemäß der manpage von Bildschirm auf der Ubuntu - Manuals Website , Bildschirm nicht die Ansprüche,

Ein Vollbild-Fenstermanager, der ein physisches Terminal zwischen mehreren Prozessen (normalerweise interaktive Shells) multiplext. Jedes virtuelle Terminal bietet die Funktionen eines DEC VT100-Terminals und zusätzlich mehrere Steuerfunktionen aus ISO 6429 (ECMA 48, ANSI X3). 64) und ISO 2022-Standards (z. B. Einfügen / Löschen von Zeilen und Unterstützung für mehrere Zeichensätze) ein Terminal-Multiplexer mit VT100 / ANSI-Terminal-Emulation.

und beim Ausführen des Bildschirms :

Ctrl ah (Hardcopy) Schreiben Sie eine Hardcopy des aktuellen Fensters in die Datei "hardcopy.n".

Ich habe es im GNOME-Terminal versucht, ausgeführt screenund getipptCtrl ah

Bildschirm ausführen und Strg Alt h eingeben

Dies ist die Ausgabe meiner Hardcopy.1-Datei beim Öffnen in Gedit:

Hardcopy.1 in Gedit eröffnet

Sie finden den Bildschirm im raring / main Software-Repository von Ubuntu 13.04.

Es ist nicht standardmäßig installiert.


quelle
-1

Hm, dies kopiert nicht die Escape-Codes, aber um den Text abzurufen, können Sie zum Menü Bearbeiten -> Alle auswählen gehen, dann drücken CtrlShiftCund entweder (i) die Zwischenablage in einen Editor einfügen oder (ii) eingeben cat > filenameund drücken CtrlShiftV.

Januar
quelle
Dies ist ein anderer Anwendungsfall. Wie ausdrücklich erwähnt, möchte ich die ANSI-Escape-Codes einschließen.
10.
-1

man history Suchen Sie nach einer Verlaufserweiterung für maskierte Zeichen. Ich glaube, ich history kann tun, was du fragst.

j0h
quelle
Ich konnte auf der manSeite nichts Relevantes finden . Bitte sei spezifischer.
10b0