Někdy chci dát barevně kódovaný výstup z procesu, např. grep... ale když to přenesu do jiného procesu, např. sed, barevné kódy jsou ztraceny…
Je nějaký způsob, jak udržet tyto kódy nedotčené?
Zde je příklad, který ztrácí barevný výstup:
echo barney | grep barney | sed -n 1,$\ p
Přijatá odpověď:
Mnoho programů, které generují barevný výstup, zjišťuje, zda píší do TTY, a vypínají barvy, pokud ne. Je to proto, že barevné kódy jsou nepříjemné, když chcete zachytit pouze text, takže se automaticky snaží „udělat správnou věc“.
Nejjednodušší způsob, jak zachytit barevný výstup z takového programu, je říct mu, aby psal barvu, i když není připojen k TTY. Budete si muset přečíst dokumentaci k programu, abyste zjistili, zda má tuto možnost. (např. grep
má --color=always
možnost.)
Můžete také použít expect
skript unbuffer
vytvořit pseudo-tty, jako je tento:
echo barney | unbuffer grep barney | sed -n 1,$\ p