Następujące stwierdzenia są prawdziwe:
watch
uruchamia komendę w nowej powłoce, sh
.
.bashrc
aliasy ls
jak ls --color=auto
włączyć kolorów.
sh
nie dziedziczy ani nie używa bash
aliasów.
Więc kiedy watch
dział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 ls
jest:
watch --color -- ls --color=always
Jeśli nie przejdziesz --color
do oglądania, zobaczysz w środku kilka brzydkich kodów kolorów.
ls --color
jest 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.