it-swarm.com.de

Erhalten Sie die Farben, während Sie zum Abschlag leiten

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 von tee farbig bleibt (kann nur auf dem Bildschirm eingefärbt werden, Farben in Protokollen interessieren mich nicht).

56

Fügen Sie einfach unbuffer vor einem Befehl ein, damit er den Eindruck erweckt, dass er in eine interaktive Ausgabe schreibt, auch wenn er tatsächlich in eine andere ausführbare Datei geleitet wird. Dadurch bleibt die Farbe bei ls erhalten.

Zum Beispiel

unbuffer ls -l --color=auto | tee output.log

Wenn Sie es noch nicht installiert haben, können Sie auf Ubuntu und anderen Debian-basierten Linux-Distributionen unbuffer installieren.

Sudo apt-get install expect-dev
78

Benutze die ls Option --color=always

--color=auto gibt aus offensichtlichen Gründen keine Farben an eine Pipeline aus.

Die Hauptseite sagt folgendes:

Bei --color = auto werden Farbcodes nur ausgegeben, wenn die Standardausgabe an ein Terminal (tty) angeschlossen ist.

10
RedGrittyBrick

Ich werde die script-Lösung im Kommentar der akzeptierten Antwort erweitern. Die Verwendung von script kann hilfreich sein, wenn Sie das expect -Paket mit dem Befehl unbuffer nicht installieren können oder möchten.

Ausgabe ls auf stdout 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
1
Juuso Ohtonen