As seguintes afirmações são verdadeiras:
-
watchexecuta o comando em um novo shell,sh. -
.bashrcaliaseslsasls --color=autopara ativar as cores -
shnão herda ou usabashaliases.
Então, quando watch executa ls , não está pedindo cores, apenas está executando a versão antiga simples. Você pode contornar isso, mas - como aditya aponta - você também precisa ativar as cores em watch para processá-las corretamente.
Um exemplo de trabalho para ls é:
watch --colour -- ls --color=always
Se você não passar --color para assistir, verá inúmeros códigos de cores feios em linha.
ls --color é interpretado como ls --colour=always .
ls --colour=auto não imprime a cor no relógio. Isso sugere que está inferindo suporte de cores do próprio terminal.
Para saber mais sobre o motivo, podemos testar se o watch shell acha que é um terminal real :
$ bash -c '[[ -t 1 ]] && echo "real terminal"'
real terminal
$ watch -- "bash -c '[[ -t 1 ]] && echo "real terminal"'"
# ... nothing.
Eu suspeito que alguns aplicativos estão olhando para isso (ou similar) para dizer se eles devem ativar as cores ou não.