Když spustím příkaz z terminálu, který vytiskne barevný výstup (například ls
nebo gcc
), vytiskne se barevný výstup. Jak jsem pochopil, proces ve skutečnosti vydává únikové kódy ANSI a terminál formátuje barvu.
Pokud však provedu stejný příkaz jiným procesem (řekněme vlastní C aplikací) a přesměruji výstup na vlastní výstup aplikace, tyto barvy nezůstanou zachovány.
Jak se program rozhodne, zda bude či nebude vystupovat text v barevném formátu? Existuje nějaká proměnná prostředí?
Přijatá odpověď:
Většina takových programů standardně odesílá pouze barevné kódy do terminálu; zkontrolují, zda jejich výstup je TTY, pomocí isatty(3)
. Obvykle existují možnosti, jak toto chování potlačit:zakázat barvy ve všech případech nebo povolit barvy ve všech případech. Pro GNU grep
například --color=never
zakáže barvy a --color=always
umožňuje je.
V shellu můžete provést stejný test pomocí -t
test
operátor:[ -t 1 ]
bude úspěšný pouze v případě, že standardním výstupem je terminál.