2014-12-10 11 views
19

Sehr oft (nicht immer) wird das stdout in Farben angezeigt. Normalerweise behalte ich jedes Ausgabeprotokoll auch in einer anderen Datei. Natürlich werden in der Datei die Farben nicht mehr angezeigt.Wie stdout in Datei mit Farben schreiben?

enter image description here

würde ich gerne wissen, ob es einen Weg gibt ist (unter Linux) mit Farben die Ausgabe in eine Datei 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 es gilt). Ich möchte es speziell für Landstreicher verwenden (es kann natürlich in der Zukunft ändern, natürlich ...)

Vielen Dank!

+2

üblicherweise wird das Programm das Schreiben zu tun bestimmt, ob es zu einem Terminal zu schreiben ist, und wenn es nicht, es ist nicht Farben. Es geht also wahrscheinlich darum, dem Programm zu sagen, dass es sowieso Farben verwenden soll. Einige Programme haben etwas wie "--color always", aber es gibt keinen Standard. – Biffen

Antwort

9

können Sie die ANSI-Sequenzen speichern, die die Ausgabe in eine Datei colourise:

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

Einige Programme, obwohl, neigen nicht zu sie verwenden, wenn ihre Ausgabe zum Terminal geht nicht (das ist, warum Ich musste --color-always mit grep verwenden).

+0

Wissen Sie, ob es eine Möglichkeit gibt, dies mit 'tee' zu ​​tun? – AAlvz

+0

@AAlvz: Was ist passiert, als du es versucht hast? 'echo a | grep --color = immer. | tee colour.txt' – choroba

+0

Es ist immer rot, egal was =/ – AAlvz

17

Da viele Programme nur dann Farbsequenzen ausgeben, wenn ihr stdout ein Terminal ist, müssen Sie eine allgemeine Lösung für dieses Problem finden, indem Sie glauben, dass die Pipe, an die sie schreiben, ein Terminal ist. Dies ist möglich, mit dem Befehl von script bsdutils:

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

Dadurch wird die Ausgabe von vagrant up filename.txt (und der Klemme) schreiben. Wenn das Echo nicht erwünscht ist,

wird es nur in die Datei schreiben.

+0

Ich mag diese Antwort wirklich und es ist das beste so weit, aber ist das nicht ein wenig overkilled? :) – AAlvz

+2

'Skript' ist überraschend leicht, eigentlich. Meist öffnet es nur eine Pty, erzeugt eine Shell und leitet die Ausgabe an Sie. Es sind etwa 500 Zeilen C-Code, alles in allem. – Wintermute

+0

Danke! Ich mag diese Lösung sehr. Script hat viel Potenzial! – AAlvz

6

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

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

Auch würden Sie müssen mit den Anschlussfarbcodes

Mit tee

< command line > |tee -a 'my_colour_file' 

Öffnen Sie die Datei in Katze

cat 'my_colour_file' 

Mit einem Namen vertraut sein Pipe kann auch arbeiten um alle umzuleiten o utput aus dem Rohr mit Farben auf eine andere Datei

beispiels

Erstellen einer Named Pipe

mkfifo pipe.fifo 

jede Befehlszeile es auf das umzuleiten, wie

<command line> > pipe.fifo 

In einem anderen Endgerät folgt umleiten alle Nachrichten aus dem Rohr zu Ihrer Datei

cat pipe.fifo > 'my_log_file_with_colours' 

öffnen Sie Ihre Datei mit Katze und die erwarteten Ergebnisse sehen.

+0

Das Problem hier ist, dass die Vagrant-Ausgabe bereits Farben hat ... Ich verwende derzeit 'tee', um sie zu speichern zu einer Datei – AAlvz

+0

gute Beobachtung..aber es zeigt immer noch das Prinzip, dass farbige Ausgabe gespeichert werden kann. Antwort bearbeitet, um dieses kleine Detail zu korrigieren. – repzero

+0

Ich bin mir auch sicher, dass es getan werden kann ... Aber ich weiß immer noch nicht wie. Wenn Sie mit einer Idee kommen, sagen Sie es mir bitte. – AAlvz

0

Ich fand heraus, dass das Werkzeug ansi2html.sh

ist die einfachste Art und Weise zu exportieren bunte Terminal Daten zu HTML-Datei,

Die Befehle zu verwenden, es ist aufgerufen mit:

ls --color=always | ansi2html.sh --palette=solarized > ~/Desktop/ls.html 
  • Alle benötigt werden, ist die Ausgabe mit einem Rohr zu senden und Ausgang dann die stdout auf einfache hTML-Datei