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.