¿Por qué no aparecen los colores git cuando se usa el reloj?

10

Cuando corro git status -sbveo:

ingrese la descripción de la imagen aquí

Quiero watch(de procps-ng 3.3.3) un repositorio. Se --colorsupone que la opción debe mantener los colores.


Curiosamente, funciona con ls:

$ watch --color "ls --color"

Demostración:

salida de ls


Sin embargo, para que gitlos colores desaparezcan:

$ watch --color "git status -sb"

ingrese la descripción de la imagen aquí


Entonces, ¿por qué watchmuestra colores lsde la gitsalida pero no de la salida?

Drew Noakes
fuente
@Jobin, gracias, realmente comenté en ese enlace antes de publicar esta pregunta :)
Drew Noakes

Respuestas:

5

Las siguientes afirmaciones son verdaderas:

  • watchEjecuta el comando en un nuevo shell, sh.
  • .bashrcalias lscomo ls --color=autopara permitir a los colores.
  • shno hereda ni usa bashalias.

Entonces, cuando se watchejecuta ls, no está pidiendo colores, solo está ejecutando la versión antigua simple. Puede eludir esto, pero, como señala aditya, también debe habilitar los colores watchpara que los procese correctamente.

Un ejemplo de trabajo para lses:

watch --color -- ls --color=always

Si no pasa --colora mirar, verá un montón de códigos de colores feos en línea.


ls --colorse interpreta como ls --color=always.

ls --color=auto No imprime color en el reloj. Esto sugiere que infiere soporte de color desde el terminal en sí.

Para obtener más información sobre el motivo, podemos probar si el shell del reloj cree que es un terminal real :

$ bash -c '[[ -t 1 ]] && echo "real terminal"'
real terminal

$ watch -- "bash -c '[[ -t 1 ]] && echo "real terminal"'"
# ... nothing.

Sospecho que algunas aplicaciones están mirando eso (o similar) para saber si deberían activar los colores o no.

Oli
fuente
3
Pero el OP quiere saber por qué esto no funciona git status -sb, a pesar de que funciona ls --color.
jobin
Esto tiene sentido. Sin embargo, no hay alias para git. La coloración se establece dentro de la configuración de git directamente . Así que esto no parece ser un problema de alias.
Drew Noakes
Bingo. Establecí mis colores para autoque, como supusiste correctamente, estaba causando que git evitara la salida de color. Usar en su alwayslugar ha resuelto este problema. ¡Muchas gracias!
Drew Noakes
9

git usa un valor de configuración para determinar si mostrar resultados en color o no.

Por ejemplo:

git config --global color.ui auto

Esto establece la configuración de color a autonivel global. En automodo, git determinará si es un terminal real antes de enviar códigos de color, como sugirió Oli.

Puede forzar este valor global always, sin embargo, una mejor idea puede ser aplicarlo a un comando particular:

git -c color.status=always status -sb

Poniendolo todo junto:

watch --color git -c color.status=always status -sb
Drew Noakes
fuente
0

Funciona si git( --color) y watch( -c) se les dice que usen colores:

watch -cd "git branch -va --color"
sjas
fuente