GNU/Linux >> Znalost Linux >  >> Linux

Jak se program rozhodne, zda bude či nebude mít barevný výstup?

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.


Linux
  1. Jak Gzip pouze v případě, že Thesqldump nedojde k chybě?

  2. Jak spustit vícevláknový Grep v terminálu?

  3. Jak Grep linky, které nezačínají "#" nebo ";"?

  1. Jak funguje příkaz Exit na Unixovém terminálu?

  2. Jak nedělat nic navždy elegantním způsobem?

  3. Linux – Ldd nenajde cestu, jak přidat?

  1. Jak vytisknu barevný text do terminálu Linux?

  2. Výzva Docker bash nezobrazuje barevný výstup

  3. Jak přesměrovat výstup programu jako jeho vstup