Wenn ich einen Befehl von einem Terminal ausführe, das eine farbige Ausgabe ausgibt (wie ls
oder gcc
), wird die farbige Ausgabe gedruckt. Nach meinem Verständnis gibt der Prozess tatsächlich ANSI-Escape-Codes aus, und das Terminal formatiert die Farbe.
Wenn ich jedoch denselben Befehl von einem anderen Prozess (z. B. einer benutzerdefinierten C-Anwendung) ausführe und die Ausgabe auf die eigene Ausgabe der Anwendung umleite, bleiben diese Farben nicht bestehen.
Wie entscheidet ein Programm, ob Text farbig ausgegeben wird oder nicht? Gibt es eine Umgebungsvariable?
Akzeptierte Antwort:
Die meisten dieser Programme geben standardmäßig nur Farbcodes an ein Terminal aus; sie prüfen, ob ihre Ausgabe ein TTY ist, indem sie isatty(3)
verwenden . Normalerweise gibt es Optionen, um dieses Verhalten zu überschreiben:Farben in allen Fällen deaktivieren oder Farben in allen Fällen aktivieren. Für GNU grep
zum Beispiel --color=never
deaktiviert Farben und --color=always
aktiviert sie.
In einer Shell können Sie den gleichen Test mit -t
durchführen test
Operator:[ -t 1 ]
wird nur erfolgreich sein, wenn die Standardausgabe ein Terminal ist.