Następujące stwierdzenia są prawdziwe:
watchuruchamia komendę w nowej powłoce, sh.
.bashrcaliasy lsjak ls --color=autowłączyć kolorów.
shnie dziedziczy ani nie używa bashaliasów.
Więc kiedy watchdziała ls, nie prosi o kolory, po prostu uruchamia zwykłą starą wersję. Możesz to obejść, ale - jak wskazuje aditya - musisz także włączyć kolory watch, aby je poprawnie przetworzyć.
Działającym przykładem lsjest:
watch --color -- ls --color=always
Jeśli nie przejdziesz --colordo oglądania, zobaczysz w środku kilka brzydkich kodów kolorów.
ls --colorjest interpretowany jako ls --color=always.
ls --color=auto nie drukuje kolorów w zegarku. Sugeruje to, że wnioskuje o obsługę kolorów z samego terminala.
Aby dowiedzieć się więcej o tym, dlaczego, możemy sprawdzić, czy powłoka zegarka uważa, że to prawdziwy terminal :
$ bash -c '[[ -t 1 ]] && echo "real terminal"'
real terminal
$ watch -- "bash -c '[[ -t 1 ]] && echo "real terminal"'"
# ... nothing.
Podejrzewam, że niektóre aplikacje patrzą na to (lub podobnie), aby stwierdzić, czy powinny włączyć kolory, czy nie.