A veces quiero canalizar la salida codificada por colores para un proceso, por ejemplo. grep ... pero cuando lo canalizo a otro proceso, por ejemplo. sed, los códigos de color se pierden ...
¿Es la forma de mantener intactos estos códigos?
Aquí hay un ejemplo que pierde la salida coloreada:
echo barney | grep barney | sed -n 1,$\ p
command-line
colors
pipe
escape-characters
Peter.O
fuente
fuente
less
puede aceptar entradas de texto coloreadas (agradable :) ... por ejemplo:tree -C ~/ |less -R
ols -lR --color=always . |less -R
Respuestas:
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,
grep
tiene la--color=always
opción).También puede usar el
expect
scriptunbuffer
para crear un pseudo-tty como este:fuente
stdout
va. En realidad, no estoy seguro de siunbuffer
funciona cuando estás entrando en el programa y fuera de él; No lo tengo instalado aquí para probar.unbuffer
información, ayuda a la salida de mi bot IRC como la salida en shell.Esto funciona para mi ;-! (en el entorno MingW actual)
# barney se muestra como texto rojo
fuente
tree
is colorized a-la dircolors if the LS_COLORS environment variable is set and output is to tty
... Tal vez (?) Hay una manera de engañar a una tubería para que piense que se está enviando a un TTY ... o alguna solución general. .man tree
... También tiene una opción similar,-C
... tal vez es una característica común para los programas que