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.