As seguintes afirmações são verdadeiras:
watchexecuta o comando em um novo shell sh,.
.bashrcaliases lscomo ls --color=autopara permitir cores.
shnão herda ou usa bashaliases.
Então, quando watché executado ls, não está pedindo cores, está apenas executando a versão antiga simples. Você pode contornar isso, mas, como aditya ressalta, também precisa ativar as cores watchpara processá-las adequadamente.
Um exemplo de trabalho para lsé:
watch --color -- ls --color=always
Se você não passar --colorpara assistir, verá vários códigos de cores feios em linha.
ls --coloré interpretado como ls --color=always.
ls --color=auto não imprime cores no relógio. Isso sugere que ele está deduzindo o suporte de cores do próprio terminal.
Para saber mais sobre o motivo, podemos testar se o relógio acha que é um terminal real :
$ bash -c '[[ -t 1 ]] && echo "real terminal"'
real terminal
$ watch -- "bash -c '[[ -t 1 ]] && echo "real terminal"'"
# ... nothing.
Suspeito que alguns aplicativos estejam analisando isso (ou similar) para saber se devem ativar as cores ou não.