답변:
diff
색상을 출력 할 수 없으면 다른 프로그램이 필요 colordiff
합니다. 터미널의 색상은 ANSI 이스케이프 코드 를 통해 인쇄 되며 기본적으로 덜 해석됩니다. less
색상을 올바르게 표시 하려면 -r
, 또는 더 나은 -R
스위치 가 필요합니다 .
colordiff -- "$file1" "$file2" | less -R
보낸 사람 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.
또는 more
기본적으로 색상을 올바르게 표시하는을 사용할 수 있습니다 .
외부 프로그램을 설치할 수없는 경우보다 수동적 인 접근 방식을 사용하여 동일한 출력을 얻을 수 있어야합니다.
diff a b |
perl -lpe 'if(/^</){$_ = "\e[1;31m$_\e[0m"}
elsif(/^>/){$_ = "\e[1;34m$_\e[0m"}'
여기에 다른 답변이 오래되었을 수 있습니다. coreutils 3.5부터는 diff
stdout이 콘솔이 아닌 경우 기본적으로 꺼져있는 컬러 출력을 생성 할 수 있습니다.
매뉴얼 페이지에서 :
--color[=WHEN]
출력물을 채색하십시오.WHEN
할 수있다never
,always
또는auto
(기본)
stdout이 파이프 diff --color=always -- "$file1" "$file2" | less -R
일 때 컬러 출력을 강제하려면 작동해야합니다.
alias diff='diff --color=always'
A의 .bashrc
또는 .zshrc
파일을.
alias diff='diff --side-by-side --left-column --color=always'
alias diff='/usr/bin/diff --color=always '
하고 alias less='/usr/bin/less -r '
있지만, DIFF가 처음 이하의 처음 몇 페이지에 있지만 긴 차이점에 색깔 있지만 때로는 모노로 다시 뒤집습니다. diff에 영향을 미치지 않는 점프에있을 수 있습니다. 출력은 한 번만 생성되고 점프 할 필요가 없지만 색상 추적을 덜 잃습니다.
채색 된 diff를 덜 파이프하려면 :
diff $file1 $file2 | colordiff | less -r
단일 화면으로 제한하여 더 읽기 쉽게하려면 :
diff -uw $file1 $file2 | colordiff | less -r
그리고 화면에 가치가있는 화면이 하나 뿐인 경우 표시되지 않도록하려면 :
diff -uw $file1 $file2 | tee /dev/stderr | colordiff | less -r -F
-F는 내용이 걱정되는 화면이 두 개 미만인 경우 즉시 닫히지 않습니다. stderr로 파이프는 닫을 때 출력을 잃을 때-stderr로 파이프하여 표시하지 않아도 출력을 얻습니다.
대안 (그리고 더 나은 생각) 방법은 화면을 덜 지우는 것을 막기 위해 -X를 사용하는 것입니다.
diff -uw $file1 $file2 | colordiff | less -r -X -F
이것은 나에게 잘 작동하지만 bash에만 해당 될 수 있습니다. colordiff는 내장되어 있지 않지만 쉽게 설치할 수 있습니다.
less -r
less -RM +Gg
.