Muchos programas que generan resultados en color detectan si están escribiendo en un TTY y desactivan los colores si no lo están. Esto se debe a que los códigos de color son molestos cuando solo desea capturar el texto, por lo que intentan "hacer lo correcto" automáticamente.
La forma más sencilla de capturar la salida de color de un programa como ese es decirle que escriba color aunque no esté conectado a un TTY. Tendrá que leer la documentación del programa para averiguar si tiene esa opción. (por ejemplo, greptiene la --color=alwaysopción).
También puede usar el expectscript unbufferpara crear un pseudo-tty como este:
echo barney | unbuffer grep barney | sed -n 1,$\ p
lesspuede aceptar entradas de texto coloreadas (agradable :) ... por ejemplo:tree -C ~/ |less -Rols -lR --color=always . |less -R