diff
können keine Farben ausgeben, benötigen Sie ein anderes Programm, wie zum Beispiel colordiff
dafür. Farben im Terminal werden über ANSI-Escape-Codes gedruckt, die standardmäßig nicht von less interpretiert werden. Um less
Farben korrekt darzustellen, benötigen Sie den -r
oder noch besser den -R
Schalter:
colordiff -- "$file1" "$file2" | less -R
Von man less
:
-R or --RAW-CONTROL-CHARS
Like -r, but only ANSI "color" escape sequences are
output in "raw" form. Unlike -r, the screen appearance
is maintained correctly in most cases. ANSI "color"
escape sequences are sequences of the form:
ESC [ ... m
where the "..." is zero or more color specification
characters For the purpose of keeping track of screen
appearance, ANSI color escape sequences are assumed to
not move the cursor. You can make less think that
characters other than "m" can end ANSI color escape
sequences by setting the environment variable LESSAN‐
SIENDCHARS to the list of characters which can end a
color escape sequence. And you can make less think
that characters other than the standard ones may appear
between the ESC and the m by setting the environment
variable LESSANSIMIDCHARS to the list of characters
which can appear.
Alternativ können Sie festlegen, more
welche Farben standardmäßig korrekt angezeigt werden.
Wenn Sie keine externen Programme installieren können, sollten Sie in der Lage sein, die gleiche Ausgabe auf manuellere Weise zu erhalten:
diff a b |
perl -lpe 'if(/^</){$_ = "\e[1;31m$_\e[0m"}
elsif(/^>/){$_ = "\e[1;34m$_\e[0m"}'
less -RM +Gg
: superuser.com/questions/64972/...Die anderen Antworten hier sind möglicherweise veraltet. Ab Coreutils 3.5
diff
kann in der Tat eine farbige Ausgabe erzeugt werden, die standardmäßig deaktiviert ist, wenn die Standardausgabe keine Konsole ist.Von der Manpage:
Um die Farbausgabe zu erzwingen, sollte bei stdout eine Pipe
diff --color=always -- "$file1" "$file2" | less -R
funktionieren.quelle
alias diff='diff --color=always'
eine.bashrc
oder eine.zshrc
Datei hinzufügen.alias diff='diff --side-by-side --left-column --color=always'
alias diff='/usr/bin/diff --color=always '
undalias less='/usr/bin/less -r '
aber, obwohl das Diff anfänglich auf den ersten paar Seiten von weniger gefärbt ist, aber auf langen Diffs wird es manchmal auf Mono zurückgeschaltet. Dies kann bei Sprüngen der Fall sein, die sich eindeutig nicht auf diff auswirken, da die Ausgabe nur einmal generiert wird und nicht springen muss, aber irgendwie weniger den Überblick über die Farben verliert.Um farbiges Diff auf weniger zu leiten:
Um die Lesbarkeit zu verbessern, beschränken Sie sich auf einen einzigen Bildschirm:
Und um zu verhindern, dass weniger angezeigt wird, wenn nur ein Bildschirm mit Inhalten vorhanden ist:
Das -F bewirkt, dass weniger sofort geschlossen wird, wenn weniger als ein Bildschirm angezeigt wird. Die Pipe zu stderr geht verloren, wenn weniger geschlossen wird. Durch das Weiterleiten an stderr wird die Ausgabe erhalten, auch wenn weniger nicht angezeigt wird.
Eine alternative (und meiner Meinung nach bessere) Möglichkeit besteht darin, einfach -X zu verwenden, um zu verhindern, dass der Bildschirm weniger gelöscht wird:
Dies funktioniert gut für mich, könnte aber spezifisch für Bash sein. Colordiff ist kein eingebautes, aber leicht zu installieren.
quelle
less -r