Ich habe ein langfristig laufendes Skript und habe vergessen, die Ausgabe in eine Datei umzuleiten. Ich kann es in einem Terminal sehen, aber kann ich es in einer Datei speichern?
Ich frage nicht , für tee
, die Umleitung der Ausgabe (zB >
, >>
) usw. - der Befehl hat begonnen, und ich kann es nicht wieder laufen. Ich muss die bereits generierte Ausgabe speichern. Wenn ich es auf meinem Display sehen kann, ist es irgendwo gespeichert / zwischengespeichert / gepuffert. Woher?
screendump
, /dev/vcsX
und so weiter kann ich nur den letzten Bildschirm der Terminalausgabe speichern (nicht den aktuellen! - Scroll-Terminal hilft nicht).
Dies ist auf einer virtuellen Linux-Konsole, nicht auf einem X11-Terminalemulator wie gnome-terminal
bei einer Maus und anderen Extras.
/dev/
, oder? Ansonsten haben Sie geschrieben, wie Sie es erreichen.Antworten:
/dev/vcs[a]<n>
Sie erhalten nur den letzten Bildschirm, auch wenn Sie einen Bildlauf durchgeführt haben. Mit der Auswahlioctl()
vongpm
können Sie den aktuell angezeigten Bildschirm auch dann ausgeben, wenn Sie einen Bildlauf durchgeführt haben.Sie können also Folgendes tun:
Stellen Sie die 80 und 25 auf Ihre tatsächliche Bildschirmbreite und -höhe ein.
Das
sleep 3
gibt Ihnen Zeit , um nach oben (mit Shift+PageUP) dem eigentlichen Bildschirm Sie dump möchten.cat > file
leitet die Paste weiter zufile
. Beende es mit Ctrl+D.Siehe
console_ioctl(4)
für weitere Einzelheiten.Wenn Sie
gpm
installiert haben und ausgeführt werden, können Sie diese Auswahl mit der Maus vornehmen.Der Scrollback und die Auswahl der virtuellen Linux-Konsole sind sehr begrenzt und ziemlich ärgerlich (wenn Sie die Konsole wechseln, verlieren Sie den gesamten Scrollback). Zukünftig würde ich vorschlagen, dass Sie Dinge wie GNU
screen
odertmux
innerhalb davon verwenden (ich persönlich benutze sie in noch leistungsfähigeren Terminals). Mit ihnen können Sie größere durchsuchbare Scrollbacks haben und diese einfach in Dateien speichern (und sogar die gesamte Terminal-Ausgabe sowie alle anderen Extras protokollieren, die mit diesen Terminal-Multiplexern geliefert werden).Die Automatisierung des Prozesses zum Speichern des gesamten Bildlaufpuffers sollte unter bestimmten Bedingungen möglich sein, ist jedoch recht schwierig, da die API sehr begrenzt ist. Es gibt eine undokumentierte
ioctl
(TIOCLINUX, Subcode = 13), um die aktuelle virtuelle Konsole um einen gewissen Versatz zu scrollen (negativ zum Scrollen nach oben, positiv zum Scrollen nach unten).Es gibt jedoch keine Möglichkeit (die ich kenne), die aktuelle Größe des Scrollback-Puffers zu ermitteln. Es ist also schwer zu wissen, wann Sie die Spitze dieses Puffers erreicht haben. Wenn Sie versuchen, daran vorbei zu scrollen, wird der Bildschirm nicht so stark verschoben, und es gibt keine verlässliche Möglichkeit, festzustellen, um wie viel der Bildschirm tatsächlich gescrollt hat.
Ich finde auch das Verhalten des Bildlaufs unregelmäßig (zumindest mit der VGA-Konsole), wo das Scrollen um weniger als 4 Zeilen nur gelegentlich funktioniert.
Das folgende Skript scheint für mich auf Frame-Buffer-Konsolen (und gelegentlich auf VGA-Konsolen) zu funktionieren, vorausgesetzt, der Scrollback-Buffer enthält keine Sequenzen identischer Zeilen, die länger als ein Bildschirm plus eine Zeile sind.
Es ist ziemlich langsam, da es zeilenweise einen Bildlauf durchläuft und 10 ms auf eof warten muss, wenn jedes Bildschirmabbild gelesen wird.
Verwendung
that-script > file
ab der virtuellen Konsole.quelle
https://github.com/jerome-pouiller/reredirect/ könnte eine Option sein?
Beschreibung:
Die Syntax lautet wie folgt:
quelle