Erhalten Sie Farben, während Sie zum Abschlag leiten
62
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).
Fügen Sie einfach unbuffereinen 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.
Dies führt dazu, dass die resultierende Datei (natürlich) Farbcodes enthält. Gibt es eine Möglichkeit, die Datei so zu drucken , dass die Farbcodes verwendet werden und die Farben im Terminal ordnungsgemäß angezeigt werden?
Kyle Strand
2
Puh, dass Passworteingaben Ihr Passwort im Klartext anzeigen!
AndiDog
@Tgr Diese Lösung hat unter OS X nicht funktioniert, da ich versucht habe, die rohe xcodebuildFarbausgabe von zu erhalten. Stattdessen habe ich zerhackte Linien ohne Farbe erhalten. unbuffer xcodebuild | less -Rfunktionierte jedoch einwandfrei.
Slipp D. Thompson
2
Sie brauchen das expect-devPaket nicht. expectreicht.
Yajo
11
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.
OKAY. Das erklärt es. Aber kann ich trotzdem irgendwie die Farben auf dem Bildschirm sehen? (Es ist immerhin ein TTY). Es macht mir nichts aus, sie NICHT in der Logdatei zu haben, aber ich möchte sie auf meinem Bildschirm haben.
Paweł Gościcki
Ich glaube, ich habe mich nicht klar genug ausgedrückt. ls -lwar 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.
Paweł Gościcki
1
@Pawel, du kannst es nicht einfach in tee / pipe reparieren, da tee / pipe diese Farbcodes nicht entfernen. Das Problem ist, dass der ursprüngliche Befehl sieht, dass er nicht in das Terminal schreibt. Sie benötigen ein Pseudoterminal , das sich wie eine Pipe verhält, das jedoch als Terminal angezeigt wird.
RedGrittyBrick
Hm ... fair genug. Ich muss wohl einfach akzeptieren, dass es so ist.
Paweł Gościcki
3
@ PawełGościcki diese Antwort behebt nur das Problem für ls. Siehe meine Antwort, die das Problem für alle Programme, einschließlich Heroku-Protokolle, behebt.
Eamonn O'Brien-Strain
3
Ich werde die scriptim Kommentar der akzeptierten Antwort angegebene Lösung erweitern . Die Verwendung von scriptkann hilfreich sein, wenn Sie das Expect- Paket, das den unbufferBefehl enthält, nicht installieren können oder möchten .
Druckausgabels 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).
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 erhaltenls
.Zum Beispiel
Wenn Sie es noch nicht installiert haben, können Sie es auf Ubuntu und anderen Debian-basierten Linux-Distributionen installieren
unbuffer
.quelle
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:
quelle
ls -l
war nur ein Beispiel. Ich habe einen völlig anderen Befehl (Heroku-Protokolle), mit dem Farben beim Weiterleiten entfernt werdentee
. 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 vonscript
kann hilfreich sein, wenn Sie das Expect- Paket, das denunbuffer
Befehl enthält, nicht installieren können oder möchten .Druckausgabe
ls
auf Standardausgabe und Datei mit Farbcodes :wo (
man script
):Zeigen Sie die Ausgabedatei mit Farben an:
quelle
-e
ist das gleiche wie--return
- keine Notwendigkeit für beide;-efq
ist--return --flush --quiet
.