Lors de l'exécution de git status -sb
Je vois :
Je veux watch
(à partir de procps-ng 3.3.3) un référentiel. Le --color
l'option est censée conserver les couleurs.
Fait intéressant, cela fonctionne avec ls
:
$ watch --color "ls --color"
Affichage :
Cependant pour git
les couleurs disparaissent :
$ watch --color "git status -sb"
Alors, pourquoi watch
afficher les couleurs de ls
mais pas depuis git
sortie ?
Réponse acceptée :
Les affirmations suivantes sont vraies :
watch
exécute la commande dans un nouveau shell,sh
..bashrc
aliasls
commels --color=auto
pour activer les couleurs.sh
n'hérite ni n'utilisebash
alias.
Alors, quand watch
exécute ls
, il ne demande pas de couleurs, il exécute simplement l'ancienne version. Vous pouvez contourner cela mais, comme le souligne Aditya, vous devez également activer les couleurs sur watch
pour qu'il les traite correctement.
Un exemple de travail pour ls
est :
watch --color -- ls --color=always
Si vous ne passez pas --color
à regarder, vous verrez un tas de codes de couleur laids en ligne.
ls --color
est interprété comme ls --color=always
.
ls --color=auto
pas couleur d'impression dans la montre. Cela suggère qu'il déduit la prise en charge des couleurs à partir du terminal lui-même.
Pour en savoir plus sur la raison, nous pouvons tester si la coque de la montre pense que c'est un vrai terminal :
$ bash -c '[[ -t 1 ]] && echo "real terminal"'
real terminal
$ watch -- "bash -c '[[ -t 1 ]] && echo "real terminal"'"
# ... nothing.
Je soupçonne que certaines applications regardent cela (ou similaire) pour dire si elles doivent activer les couleurs ou non.