Lorsque j'exécute une commande à partir d'un terminal qui imprime une sortie colorée (telle que ls
ou gcc
), la sortie couleur est imprimée. D'après ce que j'ai compris, le processus génère en fait des codes d'échappement ANSI et le terminal formate la couleur.
Cependant, si j'exécute la même commande par un autre processus (par exemple une application C personnalisée) et que je redirige la sortie vers la propre sortie de l'application, ces couleurs ne persistent pas.
Comment un programme décide-t-il de produire ou non du texte au format couleur ? Existe-t-il une variable d'environnement ?
Réponse acceptée :
La plupart de ces programmes n'envoient que des codes de couleur à un terminal par défaut ; ils vérifient si leur sortie est un TTY, en utilisant isatty(3)
. Il existe généralement des options pour remplacer ce comportement :désactiver les couleurs dans tous les cas ou activer les couleurs dans tous les cas. Pour GNU grep
par exemple, --color=never
désactive les couleurs et --color=always
les active.
Dans un shell, vous pouvez effectuer le même test en utilisant le -t
test
opérateur :[ -t 1 ]
ne réussira que si la sortie standard est un terminal.