Ich möchte manchmal die farbcodierte Ausgabe für einen Prozess leiten, z. grep ... aber wenn ich es zu einem anderen Prozess leite, zB. sed, die Farbcodes gehen verloren ...
Ist die eine Möglichkeit, diese Codes intakt zu halten?
Hier ist ein Beispiel, das die Farbausgabe verliert:
echo barney | grep barney | sed -n 1,$\ p
command-line
colors
pipe
escape-characters
Peter.O
quelle
quelle
less
kolorierte Texteingaben akzeptiert werden können (nett :) ... zB:tree -C ~/ |less -R
oderls -lR --color=always . |less -R
Antworten:
Viele Programme, die eine farbige Ausgabe generieren, erkennen, ob sie in ein TTY schreiben, und schalten Farben aus, wenn sie dies nicht tun. Dies liegt daran, dass Farbcodes ärgerlich sind, wenn Sie nur den Text erfassen möchten, und daher automatisch versuchen, "das Richtige zu tun".
Die einfachste Möglichkeit, die Farbausgabe eines solchen Programms zu erfassen, besteht darin, es anzuweisen, Farbe zu schreiben, obwohl es nicht mit einem TTY verbunden ist. Sie müssen die Dokumentation des Programms lesen, um herauszufinden, ob diese Option verfügbar ist. (Hat zB
grep
die--color=always
Option.)Sie können das
expect
Skript auch verwendenunbuffer
, um eine Pseudotty wie die folgende zu erstellen:quelle
stdout
es geht. Ich bin mir nicht sicher, ob esunbuffer
funktioniert, wenn Sie sowohl in das Programm als auch aus dem Programm heraus pfeifen. Ich habe es hier nicht installiert, um es zu versuchen.unbuffer
Information, es hilft der Ausgabe meines IRC-Bots wie der Ausgabe in der Shell.Für mich geht das ;-! (in der aktuellen MingW-Umgebung)
# barney wird als roter Text angezeigt
quelle
tree
is colorized a-la dircolors if the LS_COLORS environment variable is set and output is to tty
... Vielleicht (?) Gibt es einen Weg, eine Pipe dazu zu bringen, zu denken, dass sie an ein TTY ausgegeben wird ... oder eine solche allgemeine Problemumgehung. .man tree
... Es hat auch eine ähnliche Option,-C
... vielleicht ist es eine gemeinsame Funktion für Programme, die Farb-Escape-Codes ausgeben ..