Следующие утверждения верны:
watchзапускает команду в новой оболочке sh.
.bashrcпсевдонимы , lsкак ls --color=autoдля того, чтобы цвет.
shне наследует и не использует bashпсевдонимы.
Поэтому, когда watchзапускается ls, он не запрашивает цвета, он просто запускает старую версию. Вы можете обойти это, но, как указывает адитья, вам также нужно включить цвета, watchчтобы они правильно обрабатывали их.
Рабочий пример для ls:
watch --color -- ls --color=always
Если вы не перейдете --colorк просмотру, вы увидите множество уродливых цветовых кодов.
ls --colorинтерпретируется как ls --color=always.
ls --color=auto не печатает цвет в часах. Это говорит о том, что это выводит цветовую поддержку из самого терминала.
Более подробно о причине, почему мы можем проверить, считает ли оболочка часов реальный терминал :
$ bash -c '[[ -t 1 ]] && echo "real terminal"'
real terminal
$ watch -- "bash -c '[[ -t 1 ]] && echo "real terminal"'"
# ... nothing.
Я подозреваю, что некоторые приложения смотрят на это (или подобное), чтобы сказать, должны ли они включать цвета или нет.