Kopieren des GNU-Bildschirm-Scrollback-Puffers in eine Datei (erweiterte Hardcopy)

187

Wie kann ich den GNU Screen Scrollback-Puffer einfach in eine Datei kopieren? Dh eine leistungsfähigere Version des Befehls 'Hardcopy'?

Im GNU-Bildschirm kann ich mit " Ctrl+ A Esc" den Scrollback-Puffer eingeben. Ich könnte dann den gesamten Puffer markieren und mit " Ctrl+ A Ctrl+ ]" in einen Emacs- Puffer einfügen und ihn so in einer Datei speichern.

Dies ist jedoch mühsam. Gibt es einen Bildschirmbefehl, der den Bildlaufpuffer einfach in eine Datei kopiert, wie dies bei 'Hardcopy' für den sichtbaren Teil des Bildschirms der Fall ist?

Peter Mortensen
quelle

Antworten:

283

Geben Sie ein, um den gesamten Inhalt des Scrollback-Puffers in eine Datei zu schreiben

Ctrl+ Aund dann : in den Befehlsmodus gelangen

hardcopy -h <filename>

In älteren Versionen von screenwird hardcopy -hnur in die Datei geschrieben -h. Dies wurde in Version 4.2.0 behoben, sodass geschrieben wird hardcopy -h, hardcopy.Nwo Nsich die aktuelle Fensternummer befindet.

Rechnung
quelle
1
Beachten Sie, dass die Datei im Home-Verzeichnis gespeichert wird - zumindest für mich. Danke übrigens für die Antwort!
Ritesh
2
@allrite: Es wird in $ PWD gespeichert (wenn Sie keinen vollständigen Pfad angeben), gibt es kein spezielles Verhalten.
Pushpendre
9
Ja, aber es wird in dem $ PWD gespeichert, in dem Sie den Bildschirm gestartet haben . Nicht im $ PWD der Bildschirmsitzung.
Seumasmac
7
Beachten Sie, dass die gespeicherte Datei möglicherweise leer erscheint, wenn Sie einen langen Scrollback-Puffer haben und nicht viel darin, da die ersten zehn oder hundert Zeilen leer sind und der Inhalt am Ende steht.
Terry Brown
3
Ein weiterer Hinweis zum Speicherort der Hardcopy: Wenn Sie eine CD in ein Verzeichnis kopieren und dann erneut screen -reine Verbindung zu einer vorhandenen Sitzung herstellen, wird die Hardcopy nicht im Active Directory auf dem Bildschirm oder in dem Verzeichnis gespeichert, in dem Sie sich vor der Verwendung befanden screen -r. Ich denke, es wird in dem Verzeichnis gespeichert, in dem Sie sich befanden, als Sie die Bildschirmsitzung zum ersten Mal gestartet haben. Möglicherweise können Sie dies mit dem Befehl hardcopydir ändern .
Matthias Fripp
24

Presse Ctrl+ A : bufferfile /tmp/somefile.txt ENTER , und dann Ctrl+A >

Dadurch wird der aktuelle Inhalt des Puffers in die angegebene Datei geschrieben.

Roshan
quelle
Ich habe es versucht und das "Strg-A>" sagt "Nichts ist passiert". Der erste Schritt lautete "Pufferdatei ist jetzt '/tmp/foo.txt'", scheint aber nicht einmal diese Datei zu erstellen.
1
Sind Sie sicher, dass Sie mit Strg + A [etwas in den Bildschirmpuffer kopiert haben? Es hört sich so an, als wäre Ihr Puffer leer - er kopiert nicht den gesamten Scrollback-Puffer, sondern nur den Teil, den Sie mit Strg + A ausgewählt haben [
Roshan
2
Ah, ich suchte nach einer Verknüpfung, um den gesamten Puffer ohne Strg-a zu kopieren [
12

TL; DR: ^A:writebuf <filename>

Das OP scheint eine Möglichkeit zu wollen, den ausgewählten Teil des Puffers zu verwenden, den Sie erhalten, wenn Sie ein ^ A [ausführen, Text mit Leerzeichen als Anfang und Ende auswählen und dann anstelle von ^ A] den resultierenden ausgewählten Teil speichern des Puffers in eine Datei.

Das hat funktioniert:

^A:writebuf <filename>

Hinweis: Ein 'f' in writebuf

Kevin Mullet
quelle
1
Nein, nein. OP möchte den GESAMTEN Puffer speichern, nicht nur den ausgewählten Teil. - OP
2
Ratten! Verpasste es so sehr
Kevin Mullet
4
Dieser Beitrag ist immer noch nützlich. Gut gemacht.
Justin E
1
Ich fand, dass ich einen absoluten Pfad (dh: /Users/user1/path/to/file.txt) verwenden musste, um diese Funktion auf der MacOSX-Version des Bildschirms zu nutzen
jhrf
6

Versuchen Sie hardcopy -h, den gesamten Puffer einzuschließen.

Jorge Gutierrez
quelle
2
Dies macht nur eine Hardcopy in der Datei ~ / -h
2
@barrycarter: Das hat sich möglicherweise in neueren Versionen geändert. Ab Bildschirm 4.03.01, hardcopy -hschreibt hardcopy.N, wo Ndie aktuelle Fensternummer ist.
Keith Thompson
4

Das hat bei mir funktioniert:

Rufen Sie den Bearbeitungsmodus ( ~) auf und geben Sie Folgendes ein:

:hardcopy -h buff_file

Es wurde eine riesige Datei erstellt, von der 98% leer waren, aber meine Protokolle waren in den restlichen 2% vollständig vorhanden.

freeninza
quelle
-2

Ctrl+ A, :Und geben Sie den Befehl ‚Protokoll auf‘.

Oder setzen Sie es als Standard in Ihrer .screenrc- Datei auf "Deflog ein".

Brianray
quelle
2
Ich denke, dies beginnt erst mit der Protokollierung, nachdem ich diesen Befehl ausgeführt habe. Ich möchte nicht alles protokollieren (zu ausführlich). Ich möchte nur den Scrollback-Puffer als Datei erfassen.
-3

Do Ctrl+ A, H.

Das spart den aktuellen Bildschirm in eine Hardcopy - Datei, zB hardcopy.0 für Bildschirm 0. Es scheint ein schneller Weg zu sein , als ich Ctrl+ A, :und geben Sie den Hardcopy - Befehl.

Jeff
quelle
3
Leider wird dadurch nur der SICHTBARE Teil des Bildschirms gespeichert, nicht der Scrollback-Puffer.