Многие программы, которые генерируют цветной вывод, обнаруживают, пишут ли они в TTY, и отключают цвета, если это не так. Это связано с тем, что цветовые коды раздражают, когда вы хотите захватить только текст, поэтому они пытаются автоматически «делать правильные вещи».
Самый простой способ получить вывод цвета из такой программы - сказать ей писать цвета, даже если она не подключена к TTY. Вам нужно будет прочитать документацию программы, чтобы узнать, есть ли у нее эта опция. (например, grepимеет --color=alwaysвозможность.)
Вы также можете использовать expectскрипт unbufferдля создания псевдо-tty, как это:
echo barney | unbuffer grep barney | sed -n 1,$\ p
lessможет принимать цветной ввод текста (хорошо :) ... например:tree -C ~/ |less -Rилиls -lR --color=always . |less -R