BEARBEITEN:
Ich möchte empfehlen, dass das Parsen von Farben eine allgemein schlecht durchdachte Idee ist.
Ein Grund, warum ich es wollte, war, dass ich es sowohl analysieren als auch in meiner eigenen Skriptausgabe weitergeben kann. Das ist ... okay, aber es wäre wahrscheinlich vernünftiger, Porzellan oder ähnliches zu verwenden und die farbigen Teile selbst wieder aufzubauen!
Die ursprüngliche Frage folgt.
Ich mag es, Farben zu sehen, weil meine Skripte (bisher) robust genug sind, um die Farbcodes zu verarbeiten. Es scheint, als würde ich hier gegen den Strich gehen, aber ich verstehe ehrlich gesagt nicht, was die große Sache ist, Dinge wie Escape-Codes in Skripten analysieren zu müssen. Wenn Farben für die interaktive Verwendung hilfreich sind, warum helfen sie dann nicht bei der Verwendung von Skripten, bei denen ich möglicherweise Daten aggregiere und noch mehr Daten zusammenfasse als manuell? Wären Farben nicht noch wichtiger ?
Wie auch immer, ich habe ein hübsches kleines Shell-Skript, das ich geschrieben habe und das Munges git status
ausgibt, und ich möchte nur, dass dieses Skript die Farben intakt hält. Meine globale Git-Konfiguration ist so eingestellt, dass die Listen der geänderten und nicht verfolgten Dateien im Git-Status in Farbe angezeigt werden. Leider git diff
gibt es im Gegensatz dazu keine Möglichkeit, Farbe für zu erzwingengit status
, die ich finden kann.
Um ganz klar zu sein, ist dies das Problem:
$ git status
erzeugt eine perfekte Ausgabe, aber (Auszug aus meinem Skript folgt)
git status | sed "s/^#/\x1b[34m#[0m/"
erzeugt keine farbige git status
Ausgabe, und Sie können hier sogar sehen, dass ich die führenden Hash-Zeichen explizit in Blau konvertiere, da dies dazu beiträgt, die verschiedenen Ausgabebereiche meines Skripts hervorzuheben.
Weiß jemand, wie man es dazu bringt, die Farben zu löschen? Gibt es vielleicht ein Standardprogramm, das ich verwenden kann und das als STDIN / STDOUT-Pipe "Fake Terminal" verwendet werden kann? Tatsächlich arbeite ich auch an einem pty-Pseudoterminal-Tool, damit ich es sicherlich für diesen Zweck nutzen kann, aber es ist eine ziemlich hartnäckige Lösung (und noch nicht einsatzbereit, da ich sie noch nicht fertig gebaut habe).
--porcelain
Option für verschiedene Befehle, die ein Format bieten sollten, das einfacher zu analysieren und weniger anfällig für Änderungen zwischen Umgebungen ist.Antworten:
Um eine Änderung Ihrer Git-Konfiguration zu vermeiden, können Sie Farbe nur für den aktuellen Befehl aktivieren, indem Sie eine Konfigurationsvariable mit übergeben
-c
.Für den
status
Befehl lautet die Variablecolor.status
:Für
diff
,show
,log
undgrep
Befehle ist die Variablecolor.ui
:Beachten Sie, dass
-c
kommen , müssen vor demstatus
oderdiff
Argument und nicht nach.Alternativ kann für
diff
,show
,log
undgrep
Befehle, können Sie--color=always
nach dem Befehl:Hinweis: Wie Steven sagte, können Sie, wenn Sie versuchen, aussagekräftige Daten zu extrahieren, anstatt Farben zu analysieren, um die Bedeutung zu extrahieren,
--porcelain
eine parserfreundlichere Ausgabe erhalten.Wenn Sie möchten, können Sie die Farben später wieder einführen.
Um die vom Benutzer konfigurierten Farben zu erhalten, können Sie verwenden
git config --get-colour
:reset_color="$(tput sgr0)" remote_branch_color="$(git config --get-color color.branch.remote white)" echo "Pushing to ${remote_branch_color}${branch_name}${reset_color}"
Einige weitere Beispiele hier .
quelle
git log --color=always
. Schade um die Inkonsistenzen mit der Kommandozeilenschnittstelle.--color=...
Schalter nach dem Befehl wie angegeben verwendet hat, dies jedoch nicht mit dem Status aktualisiert hat .git status
, analysieren sie die Ausgabe vongit status --porcelain
. Trotzdem ist es sehr cool zu wissen, dass wir config for git für den aktuellen Aufruf mit überschreiben können-c
.BEARBEITEN:
Ich möchte nachdrücklich empfehlen, dass das Parsen von Farben eine allgemein schlecht durchdachte Idee ist.
Ein Grund, warum ich es wollte, war, dass ich es sowohl analysieren als auch in meiner eigenen Skriptausgabe weitergeben kann. Das ist ... okay, aber es wäre wahrscheinlich vernünftiger, Porzellan oder ähnliches zu verwenden und die farbigen Teile selbst wieder aufzubauen!
Die ursprüngliche Antwort folgt.
Ich finde immer sehr schnell Antworten, nachdem ich Fragen gestellt habe. Dies hat damit zu tun, dass Sie lange genug über ein Problem nachdenken, um es aufzuschreiben und bessere Lösungsansätze zu formulieren. Wie auch immer, die Lösung dafür ist gerecht
Ich stelle mir vor, dass eine Allzwecklösung beinhaltet
expect
oder etwaspty
damit zu tun hat, Programme, die dies erfordern, dazu zu zwingen, zu glauben, dass sie sich auf einem Terminal befinden.quelle
git config --global color.ui auto
current_branch_termcode="$(git config --get-color color.branch.current green)"
Wogreen
ist der Fallback, den Sie verwenden möchten, wenn es keinen gibt? Benutzerdefinierte Konfiguration gefunden (idealerweise die Standardfarbe von git dort einfügen).Ich hatte das gleiche Problem bei der Verwendung eines Git-Alias, der einen Shell-Befehl ausführt. Anscheinend erbt die Git-Shell nicht von der aktuellen Umgebung, daher weiß sie nichts über meine Farbeinstellungen.
Zusätzlich zum Hinzufügen der globalen Git-Farb-UI-Einstellung habe ich dies behoben, indem ich meinen Alias wie folgt aussehen ließ. Dies ist der sekundäre Befehl, bei dem die Verwendung von Farben angewiesen werden muss, da Git standardmäßig ab der von den Leuten erwähnten Version 1.8.x verwendet wird.
[alias] ignored = !git ls-files -v|grep --color '^h'
Dies erzeugt jetzt eine äquivalente kolorierte Ausgabe, wenn es als Alias ausgeführt wird, so als ob ich gerade den Befehl ausgeführt hätte.
Für sed scheint diese andere Antwort zuverlässiger zu funktionieren. Verwenden Sie tput. https://unix.stackexchange.com/a/45954
quelle