2017-02-24 1 views
0

Ich habe Git für Windows installiert und bin im Allgemeinen zufrieden mit dem Feature-Set in der Bash-Shell, die es bietet. Ich habe Probleme mit einem Alias, der überall funktioniert, wo ich es auch versucht habe.Git für Windows Bash Shell 'less' Befehl zeigt Müll an, während formatierten Text von Git Protokoll Anruf

Die Alias:

alias gl='git log --graph --format='\''%Cred%h%Creset %s %C(yellow)%an | %C(cyan)%ad%Creset %C(green bold)%d%Creset'\''' | less 

In Cygwin, der MacOS bash-Terminal, und natürlich auch in einem Linux-Shell produziert die Alias ​​schöne Ergebnisse.

alias executed under Cygwin

In GFW der Bash-Shell ist der Ausgang ziemlich verstümmelt:

alias under Git For Windows Bash

Wenn ich den Befehl direkt, ohne Alias ​​laufen, funktioniert es richtig. Ich weiß also, dass die Bash-Shell von GFW nicht weiß, wie man den Befehl analysiert, wie ich es geschrieben habe.

Meine Frage: Wie bekomme ich diesen Alias ​​unter Git For Windows ordnungsgemäß funktioniert?

Ich bin offen für die Verwendung einer Alternative zu einem Alias. Wenn eine Linux-Funktion oder ein echter Git-Alias ​​besser funktioniert, bin ich mit diesen Alternativen vertraut. Es wäre schön, herauszufinden, warum das so ist.

AKTUALISIEREN/ENTDECKEN Das Problem scheint nicht bei der Interpretation des Alias ​​überhaupt zu sein. Die Ausgabe wird korrekt angezeigt, wenn ich die Pipe zu 'less' entferne. Es sieht also so aus, als ob der Befehl "less", wie er in der Git Bash Shell implementiert ist, die Escape-Sequenzen anders interpretiert (wörtlich genommen) als andere Implementierungen. Als Ergebnis wird kein Umfang des Einwickelns des Anrufs in Funktionen oder dergleichen das Kernproblem angehen.

+0

was ist die Ausgabe von 'alias ls'? – smarber

+0

Alias ​​ls = 'ls -F --color = auto --show-control-Zeichen' –

Antwort

4

Wie in den Kommentaren angegeben, handelt es sich beim Mangled Stuff um Farb-Escape-Sequenzen. Verwenden Sie less, um sie ordnungsgemäß anzuzeigen, verwenden Sie less -R.

Aus der Manpage,

-R oder --raw-CONTROL-chars wie -r, aber nur Escape-Sequenzen ANSI "Farbe" ausgegeben in "rohen" Form. Im Gegensatz zu -r wird die Bildschirmdarstellung in den meisten Fällen korrekt beibehalten. ANSI „Farbe“ Escape-Sequenzen sind Sequenzen der Form:

ESC [ ... m 

, wo die „...“ ist null oder mehr Farbspezifikation Zeichen für den Zweck verfolgen Bildschirmdarstellung zu halten, ANSI Farbe Escape-Sequenzen Es wird angenommen, dass der Cursor nicht bewegt wird. Sie können weniger denken , dass andere Zeichen als "m" ANSI-Farb-Escape-Sequenzen von beenden können, indem Sie die Umgebungsvariable LESSANSIENCHARS auf die Liste der Zeichen setzen, die eine Farb-Escape-Sequenz beenden können. Und Sie können weniger denken, dass andere Zeichen als die Standard zwischen dem ESC und dem m angezeigt werden, indem Sie die Umgebungsvariable LESSANSIMIDCHARS auf die Liste der Zeichen, die erscheinen können.