Следующие утверждения верны:
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.
Я подозреваю, что некоторые приложения смотрят на это (или подобное), чтобы сказать, должны ли они включать цвета или нет.