As seguintes afirmações são verdadeiras:
-
watch
executa o comando em um novo shell,sh
. -
.bashrc
aliasesls
asls --color=auto
para ativar as cores -
sh
não herda ou usabash
aliases.
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.