Quando eseguo un comando da un terminale che stampa un output colorato (come ls
o gcc
), viene stampato l'output a colori. Da quanto ho capito, il processo sta effettivamente emettendo codici di escape ANSI e il terminale formatta il colore.
Tuttavia, se eseguo lo stesso comando con un altro processo (ad esempio un'applicazione C personalizzata) e reindirizza l'output all'output dell'applicazione, questi colori non persistono.
Come fa un programma a decidere se produrre o meno testo in formato colore? C'è qualche variabile d'ambiente?
Risposta accettata:
La maggior parte di questi programmi invia solo codici colore a un terminale per impostazione predefinita; controllano se il loro output è un TTY, usando isatty(3)
. Di solito ci sono opzioni per ignorare questo comportamento:disabilitare i colori in tutti i casi o abilitare i colori in tutti i casi. Per GNU grep
ad esempio, --color=never
disabilita i colori e --color=always
li abilita.
In una shell puoi eseguire lo stesso test usando il -t
test
operatore:[ -t 1 ]
avrà successo solo se lo standard output è un terminale.