2011-07-26 24 views

Respuesta

8

El problema no es que bash elimine la salida de color antes de almacenar el texto, sino que git se niega a producir la salida coloreada en primer lugar, probablemente porque puede decir que su STDOUT no es un terminal. Muchos comandos hacen esto (por ejemplo, ls). La mayoría de estos tienen una opción que les indica que usen el color de todos modos, para usar precisamente en esta situación (por ejemplo, --color para ls). Consulte su documentación git si también tiene dicha opción de anulación.

+0

verdadera. Cambié el color.ui de verdadero a siempre y funcionó. – Kostas

+0

Para mí, necesitaba cambiar 'color.status' a always, not' color.ui'. – ndbroadbent

1

Para una solución específica de git, puede forzar a git a proporcionar color mediante la opción de configuración color.status. Para anular la entrada de configuración para este único comando, use git -c color.status=always status.

Recuerde que la salida del comando capturada de esta manera no incluye necesariamente la nueva línea final, por lo que querrá agregarla si planea imprimirla más tarde.

out=$(git -c color.status=always status) 
printf "$out\n" 

Para una solución más genérica que trabaja con otros programas que no proporcionan las anulaciones de color, una mejor manera de hacerlo es con la escritura, como se muestra en Can colorized output be captured via shell redirect?

En esos casos, que se quiere utilizar status=$(script -q /dev/null git status | cat)

1

Como Kilian Foth mencionó:

"Consulte la documentación de git si también tiene esa opción de anulación"

documentación Git dice (http://git-scm.com/book/en/Customizing-Git-Git-Configuration#Colors-in-Git):

"si desea que los códigos de color en la salida redirigida, en su lugar puede pasar una bandera -color al comando de Git para forzarlo a utilizar códigos de color "

Usando git versión 1.9.2, estoy intentando" git status --color "y" git --color status "pero ninguno de ellos parece tener esa bandera válida. ¿Puede ser todavía no está implementado?

Sin embargo, la captura de la salida de color de ls trabajos con esto:

IFS="" 
output=$(ls -l --color) 
echo -e "$output"