Ich möchte manchmal die farbcodierte Ausgabe für einen Prozess leiten, z. grep… aber wenn ich es an einen anderen Prozess weiterleite, z. sed gehen die Farbcodes verloren…
Gibt es eine Möglichkeit, diese Codes intakt zu halten?
Hier ist ein Beispiel, bei dem die farbige Ausgabe verloren geht:
echo barney | grep barney | sed -n 1,$\ p
Akzeptierte Antwort:
Viele Programme, die farbige Ausgaben erzeugen, erkennen, ob sie auf ein TTY schreiben, und schalten Farben aus, wenn dies nicht der Fall ist. Dies liegt daran, dass Farbcodes stören, wenn Sie nur den Text erfassen möchten, sodass sie versuchen, automatisch „das Richtige zu tun“.
Der einfachste Weg, 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 es diese Option gibt. (z. B. grep
hat den --color=always
Option.)
Sie könnten auch expect
verwenden script unbuffer
um ein Pseudo-TTY wie dieses zu erstellen:
echo barney | unbuffer grep barney | sed -n 1,$\ p