it-swarm.com.de

Wie schreibe ich stdout in eine Datei mit Farben?

Oft (nicht immer) wird der Standard in Farben angezeigt. Normalerweise behalte ich jedes Ausgabeprotokoll auch in einer anderen Datei. Natürlich werden in der Datei die Farben nicht mehr angezeigt. 

enter image description here

Ich würde gerne wissen, ob es eine Möglichkeit gibt (in Linux), die Ausgabe in eine Datei mit Farben zu schreiben. Ich versuche, tee zu verwenden, um die Ausgabe von Vagrant in eine Datei zu schreiben. Auf diese Weise kann ich immer noch die Ausgabe sehen (wenn sie zutrifft). Ich möchte es speziell für Landstreicher verwenden (es kann sich natürlich in Zukunft ändern ...) 

Vielen Dank! 

29
AAlvz

Da viele Programme nur Farbsequenzen ausgeben, wenn ihre Standardausgabe ein Endgerät ist, ist eine generelle Lösung für dieses Problem erforderlich, um zu glauben, dass die Pipe, die sie schreiben, ein Endgerät ist. Dies ist mit dem Befehl script von bsdutils möglich:

script -q -c "vagrant up" filename.txt

Dadurch wird die Ausgabe von vagrant up in dateiname.txt (und das Terminal) geschrieben. Wenn Echo nicht erwünscht ist, 

script -q -c "vagrant up" filename > /dev/null

schreibt es nur in die Datei.

25
Wintermute

Sie können die ANSI-Sequenzen, die Ihre Ausgabe farbig machen, in einer Datei speichern:

echo a | grep --color=always . > colour.txt
cat colour.txt

Einige Programme neigen jedoch dazu, nicht zu verwenden, wenn ihre Ausgabe nicht zum Terminal geht (deshalb musste ich --color-always mit grep verwenden).

10
choroba

Sie können Ihre Ausgabe auch mit Echo in verschiedenen Farben einfärben und die farbige Ausgabe in einer Datei speichern. Beispiel

echo -e '\E[37;44m'"Hello World" > my_file

Sie müssen auch mit den Farbcodes des Terminals vertraut sein

mit tee

< command line > |tee -a 'my_colour_file'

Öffnen Sie Ihre Datei in cat

cat 'my_colour_file'

Die Verwendung einer Named Pipe kann auch dazu dienen, alle Ausgaben der Pipe mit Farben in eine andere Datei umzuleiten

zum Beispiel

Erstellen Sie eine Named Pipe 

mkfifo pipe.fifo

jede Befehlszeile leitet sie wie folgt an die Pipe weiter

<command line> > pipe.fifo

Leiten Sie in einem anderen Terminal alle Nachrichten von der Pipe in Ihre Datei um

cat pipe.fifo > 'my_log_file_with_colours'

Öffnen Sie Ihre Datei mit cat und sehen Sie die erwarteten Ergebnisse.

6
repzero

In Ubuntu können Sie das Paket bsdutils installieren, um es in eine Textdatei mit ANSI-Farbcodes auszugeben:

script -q -c "ls --color=always" /tmp/t

Installieren Sie kbtin, um eine saubere [~ # ~] HTML-Datei [~ # ~] zu erstellen:

ls --color=always | ansi2html > /tmp/t.html

Installieren Sie aha und wkhtmltopdf, um ein Nice [~ # ~] pdf [~ # ~] zu generieren:

ls --color=always | aha | wkhtmltopdf - /tmp/t.pdf

Verwenden Sie eine der oben genannten Optionen mit tee, um die Ausgabe auch auf der Konsole anzuzeigen oder eine Kopie in einer anderen Datei zu speichern. Beispiel:

ls --color=always | tee /dev/stderr | aha | wkhtmltopdf - /tmp/test.pdf
2
Ivan Ogai

Ich fand heraus, dass mit dem Tool ansi2html.sh

Ist der einfachste Weg, farbige Terminaldaten in eine HTML-Datei zu exportieren,

Die zu verwendenden Befehle sind:

ls --color=always | ansi2html.sh --palette=solarized > ~/Desktop/ls.html
  • Alles was Sie brauchen ist, die Ausgabe über eine Pipe zu senden und das stdout dann in eine einfache HTML-Datei auszugeben
1
Pini Cheyni