As seguintes afirmações são verdadeiras:
watch
executa o comando em um novo shell sh
,.
.bashrc
aliases ls
como ls --color=auto
para permitir cores.
sh
não herda ou usa bash
aliases.
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 watch
para processá-las adequadamente.
Um exemplo de trabalho para ls
é:
watch --color -- ls --color=always
Se você não passar --color
para 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.