Warum erscheinen bei Verwendung der Uhr keine Git-Farben?

10

Beim Laufen git status -sbsehe ich:

Geben Sie hier die Bildbeschreibung ein

Ich möchte watch(aus procps-ng 3.3.3) ein Repository. Die --colorOption soll Farben behalten.


Interessanterweise funktioniert es mit ls:

$ watch --color "ls --color"

Zeigen:

Ausgabe von ls


Allerdings gitverschwinden die Farben:

$ watch --color "git status -sb"

Geben Sie hier die Bildbeschreibung ein


Warum watchwerden Farben lsvon der gitAusgabe angezeigt, aber nicht von der Ausgabe?

Drew Noakes
quelle
Siehe auch
jobin
@Jobin, danke, ich habe diesen Link tatsächlich kommentiert, bevor ich diese Frage gestellt habe :)
Drew Noakes

Antworten:

5

Die folgenden Aussagen sind wahr:

  • watchführt den Befehl in einer neuen Shell aus sh.
  • .bashrcAliase lsals ls --color=autozu Farben ermöglichen.
  • sherbt oder verwendet keine bashAliase.

Also , wenn watchläuft ls, ist es nicht für Farben gefragt, es läuft einfach die gute alte Version. Sie können dies umgehen, aber - wie aditya betont - müssen Sie auch Farben aktivieren, damit watchsie ordnungsgemäß verarbeitet werden können.

Ein Arbeitsbeispiel für lsist:

watch --color -- ls --color=always

Wenn Sie nicht vorbeikommen --color, um zu sehen, sehen Sie eine Reihe hässlicher Farbcodes inline.


ls --colorwird interpretiert als ls --color=always.

ls --color=auto druckt keine Farbe in der Uhr. Dies deutet darauf hin, dass die Farbunterstützung vom Terminal selbst abgeleitet wird.

Um mehr über den Grund zu erfahren, können wir testen, ob die Watch Shell ein echtes Terminal für Folgendes hält :

$ bash -c '[[ -t 1 ]] && echo "real terminal"'
real terminal

$ watch -- "bash -c '[[ -t 1 ]] && echo "real terminal"'"
# ... nothing.

Ich vermute, dass einige Anwendungen dies (oder ähnliches) prüfen, um festzustellen, ob sie Farben aktivieren sollten oder nicht.

Oli
quelle
3
Aber das OP möchte wissen, warum dies nicht funktioniert git status -sb, obwohl es funktioniert ls --color.
Jobin
Das macht Sinn. Es gibt jedoch keinen Alias ​​für git. Die Färbung wird direkt in der Konfiguration von git eingestellt . Dies scheint also kein Aliasing-Problem zu sein.
Drew Noakes
Bingo. Ich habe meine Farben so eingestellt, autodass, wie Sie richtig vermutet haben, Git die Farbausgabe vermeidet. Die Verwendung von alwaysstattdessen hat dieses Problem gelöst. Danke vielmals!
Drew Noakes
8

git Verwendet einen Konfigurationswert, um zu bestimmen, ob eine farbige Ausgabe angezeigt werden soll oder nicht.

Zum Beispiel:

git config --global color.ui auto

Dadurch wird die Farbeinstellung auf autoglobal festgelegt. Im autoModus bestimmt git, ob es sich um ein echtes Terminal handelt, bevor Farbcodes gesendet werden, wie Oli vorgeschlagen hat.

Sie können diesen globalen Wert erzwingen. alwaysEine bessere Idee ist jedoch, ihn auf einen bestimmten Befehl anzuwenden:

git -c color.status=always status -sb

Alles zusammen:

watch --color git -c color.status=always status -sb
Drew Noakes
quelle
0

Es funktioniert, wenn git( --color) und watch( -c) aufgefordert werden, Farben zu verwenden:

watch -cd "git branch -va --color"
sjas
quelle