Kann ich die Ausgabe eines vorherigen Terminalbefehls nur über die Tastatur speichern?

12

Ich habe gerade die letzten zwei Stunden damit verbracht, einen ddBefehl von einer Live-CD ohne GUI auszuführen (oder mir ein ähnliches "schwierig zu wiederholendes" Szenario vorzustellen). Alles was ich habe ist mein vertrauenswürdiges "Multi-Window" ( CTRL+ALT+F#) Bash Terminal.

Leider ddhabe ich während des Befehls einige unangenehme Fehlermeldungen und ein bisschen mehr Informationen ausgegeben, die ich gerne behalten würde. Ich habe ein USB-Laufwerk angeschlossen, auf das ich Daten schreiben kann, aber wie kann ich die vorherige Ausgabe als Textdatei speichern, nachdem der Befehl bereits ausgeführt wurde?

Wenn dies ein Terminal-Emulator in einer netten GUI gewesen wäre, hätte ich einfach meine Maus benutzt, um den Text auszuwählen, ihn zu kopieren und in ein Dokument einzufügen. Und wenn ich gewusst hätte, dass der Befehl Fehler erzeugt hätte, hätte ich ihn zunächst in eine Datei umgeleitet, aber leider war die zusätzliche Ausgabe eine Überraschung.

Wie speichere ich die Textausgabe meines vorherigen Befehls in einer Datei, ohne den Befehl erneut auszuführen? Ist das überhaupt möglich?

IQAndreas
quelle
Ich habe nach Möglichkeiten gesucht, Text auf dem Bildschirm auszuwählen, aber bisher habe ich nur Möglichkeiten gefunden, dies mit Text zu tun, den Sie in die Eingabeaufforderung eingegeben haben.
IQAndreas
Haben Sie versucht, die Ausgabeumleitung zu verwenden?
eyoung100
2
@ eyoung100 Ist das ein anderes Wort für "Piping"? Wie in dd if=/dev/sda of=/backups/sda.img > result.txt. Wenn ja, ist das Problem, dass ich den ddBefehl bereits ausgeführt habe . Ich möchte auf jeden Fall vermeiden, den Befehl erneut auszuführen, was in einigen Situationen unmöglich ist.
IQAndreas
2
Angenommen, es handelt sich um Linux: Installieren Sie gpm . (Starten Sie es ggf. zB service start gpm). Eine Region mit gedrückter linker Maustaste ausfegen. Tippen cat > outputfileund klicken Sie mit der rechten Maustaste, um die gerade ausgewählte Region einzufügen.
Mark Plotnick
1
Wenn das Ziel nur darin besteht, "die Informationen zu behalten", besteht ein letzter Ausweg darin, sich eine Kamera zu schnappen und ein Foto des Bildschirms zu machen. (Und theoretisch könnten Sie dann OCR darauf ausführen.)
Scott

Antworten:

15

Ein Linux-Kernel sollte ein On-Screen-Protokoll für Ihre VTS auf dem entsprechenden /dev/vcsa*[ttynum]Gerät speichern .

Deshalb funktioniert Folgendes:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2

... was druckt ...

hey       

Das entsprechende /dev/vcsa[ttynum]Gerät speichert eine codierte Version des formatierten Texts auf dem Bildschirm, wohingegen /dev/vcs[ttynum]dies ein einfacher Speicherauszug ist . Die vcsa[ttynum]Geräte codieren ein Bytepaar, das die einzelnen Bildschirmzeichen und ihre Attribute beschreibt, sowie eine Zeichenfolge am Kopf jeder logischen Seite, die die Anzahl der Zeilen und Spalten der referenzierten Zeichen angibt .

Wie @kasperd betont, habe ich mich vorher geirrt, indem ich davon ausgegangen bin, dass das \aBEL zwischen jedem Zeichen codiert ist, obwohl : Die Standardfarbkombination zufällig mit dem Klingelzeichen übereinstimmt.

Für Ihre Zwecke /dev/vcs[ttynum]ist das wahrscheinlich am einfachsten. Hier ist eine lso schnell auf die Unterschiede:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2 |
sed -n l

... druckt ...

hey       $

...und...

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcsa2 |
sed -n l

... druckt ...

0\200\000\004h\ae\ay\a$
mikeserv
quelle
1
vcsasetzt nicht dasselbe Zeichen zwischen alle Zeichen. Sie erhalten Paare von Bytes, aus denen hervorgeht, welches Zeichen auf dem Bildschirm angezeigt wird und welche Farbe es hat. Die Standardfarbkombination stimmt zufällig mit dem Klingelzeichen überein.
Kasperd
@kasperd - danke. Ist es besser?
mikeserv
Das ist besser. 👍
Kasperd
2

Rufen Sie ein anderes Terminal auf (/ melden Sie sich an) und führen Sie es aus sudo screendump N > screenoutput.txt. Dabei Nhandelt es sich um die Nummer des gewünschten Terminals.

Kein Rückstand, fürchte ich. Wenn diese virtuellen Konsolen eine haben, habe ich sie noch nie gesehen. Aber es bringt Ihnen alles, was Sie auf diesem Terminal sehen können.

Die Sidhekin
quelle
Wenn es funktioniert, liegt es wahrscheinlich daran, dass es sich darum kümmert /dev/vcsa*[1-9]*- (wofür sind die Superuser-Berechtigungen wohl gedacht) . Die Linux-Konsolen haben, glaube ich, auch für die meisten der 3. * -Serien einen Rückstand. Ich bin mir nicht sicher, wie man es nehmen könnte (im Gegensatz zur Verwendung der /dev/vcsa*[1-9]*Geräte), aber vielleicht gibt es einen Weg.
mikeserv
Es ist besser, nicht zu einer anderen Konsole zu wechseln, da durch das Wechseln das Backlog gelöscht wird und nur das aktuell auf dem Bildschirm angezeigte beibehalten wird.
Gilles 'SO - hör auf, böse zu sein'
@mikeserv Ja. Nun, die Manpage scheint zu sagen, dass sie beide /dev/vcs$i und verwendet /dev/vcsa$i. Es gibt jedoch ein lesbares Ergebnis. ;-)
The Sidhekin 16.03.15
@ Gilles Ah, also gibt es einen Rückstand? Komme screendumpaber nicht drauf an, auch wenn ich in der gleichen Konsole bleibe.
Die Sidhekin
1
Sie können den Scrollback anzeigen, indem Sie Shift-PageUp ein- oder mehrmals eingeben. Ich kenne keinen anderen Weg, um den Text im Scrollback zu knabbern, als die Maus über gpm zu benutzen.
Mark Plotnick