En algún momento quiero canalizar la salida codificada por colores para un proceso, por ejemplo. grep... pero cuando lo canalizo a otro proceso, p. sed, los códigos de color se pierden…
¿Hay alguna forma de mantener estos códigos intactos?
Aquí hay un ejemplo que pierde la salida coloreada:
echo barney | grep barney | sed -n 1,$\ p
Respuesta aceptada:
Muchos programas que generan salidas en color detectan si están escribiendo en un TTY y apagan los colores si no es así. 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ás que leer la documentación del programa para saber si tiene esa opción. (por ejemplo, grep
tiene el --color=always
opción.)
También podría usar el expect
secuencia de comandos unbuffer
para crear un pseudo-tty como este:
echo barney | unbuffer grep barney | sed -n 1,$\ p