ls -l --color=auto | tee output.log
Ohne Pfeife / Tee ist es farbig. Wie kann ich es so gestalten, dass es während der Verwendung farbig bleibt tee
(kann nur auf dem Bildschirm eingefärbt werden, Farben in Protokollen interessieren mich nicht).
ls -l --color=auto | tee output.log
Ohne Pfeife / Tee ist es farbig. Wie kann ich es so gestalten, dass es während der Verwendung farbig bleibt tee
(kann nur auf dem Bildschirm eingefärbt werden, Farben in Protokollen interessieren mich nicht).
Antworten:
Fügen Sie einfach unbuffer
einen Befehl vor einen Befehl ein, um den Eindruck zu erwecken, dass er in eine interaktive Ausgabe geschrieben wird, auch wenn er tatsächlich in eine andere ausführbare Datei geleitet wird. Dadurch bleibt die Farbe im Fall von erhalten ls
.
Zum Beispiel
unbuffer ls -l --color=auto | tee output.log
Wenn Sie es noch nicht installiert haben, können Sie es auf Ubuntu und anderen Debian-basierten Linux-Distributionen installieren unbuffer
.
sudo apt-get install expect-dev
xcodebuild
Farbausgabe von zu erhalten. Stattdessen habe ich zerhackte Linien ohne Farbe erhalten. unbuffer xcodebuild | less -R
funktionierte jedoch einwandfrei.
expect-dev
Paket nicht. expect
reicht.
Verwenden Sie die Option ls --color=always
--color=auto
färbt die Ausgabe nicht in eine Pipeline - aus offensichtlichen Gründen.
Die Hauptseite sagt folgendes:
Bei --color = auto werden Farbcodes nur ausgegeben, wenn die Standardausgabe an eine Klemme (tty) angeschlossen ist.
ls -l
war nur ein Beispiel. Ich habe einen völlig anderen Befehl (Heroku-Protokolle), mit dem Farben beim Weiterleiten entfernt werden tee
. Und ich möchte Tee / Pipe "reparieren / ändern", nicht den Befehl, den ich ausführe.
ls
. Siehe meine Antwort, die das Problem für alle Programme, einschließlich Heroku-Protokolle, behebt.
Ich werde die script
im Kommentar der akzeptierten Antwort angegebene Lösung erweitern . Die Verwendung von script
kann hilfreich sein, wenn Sie das Expect- Paket, das den unbuffer
Befehl enthält, nicht installieren können oder möchten .
Druckausgabe ls
auf Standardausgabe und Datei mit Farbcodes :
script -efq output.log -c "ls -l --color=auto"
wo ( man script
):
-e, --return Return the exit code of the child process. Uses the same format as bash termination on signal termination exit code is 128+n. -f, --flush Flush output after each write. This is nice for telecooperation: one person does `mkfifo foo; script -f foo', and another can supervise real-time what is being done using `cat foo'. -q, --quiet Be quiet (do not write start and done messages to either standard output or the typescript file).
Zeigen Sie die Ausgabedatei mit Farben an:
less -r output.log
-e
ist das gleiche wie --return
- keine Notwendigkeit für beide; -efq
ist --return --flush --quiet
.