colordiff가 stdin에서 작동하지 않는 이유는 무엇입니까?

colordiff가 stdin에서 작동하지 않는 이유는 무엇입니까?

파일과 파이프의 입력이 있습니다. 그들은 동일합니다. 그러면 colordiff차이점이 보고되는 이유는 무엇입니까? :

echo "123" | colordiff <(echo "123") -
1d0
< 123

이것은 colordiff로 인한 문제인 것 같습니다. 순수 diff를 사용하면 모든 것이 잘 작동합니다.

답변1

사용 차이

이것은 나에게 효과적입니다. 특정 버전에 문제가 있는 것 같나요 diff?

$ echo "123" | diff <(echo "123") -
$

내 버전

$ diff --version
diff (GNU diffutils) 3.3
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Paul Eggert, Mike Haertel, David Hayes,
Richard Stallman, and Len Tower.

다음 대체 형식을 시도해 볼 수도 있습니다.

$ diff <(echo "123") <(echo "123")
$

그러나 어느 쪽이든 동일하다고 보고해야 합니다.

colordiff는 어떻습니까?

글쎄, 이 방법은 그들이 동일하다는 것을 보여줍니다.

$ colordiff <(echo "123") <(echo "123")
$

그러나 지적했듯이 echo실제로는 두 문자열이 서로 다른 것으로 보고됩니다.

$ echo "123" | colordiff <(echo "123") -
1d0
< 123

그러나 이것이 colordiff실제로는 GNU diff를 둘러싼 Perl 스크립트 래퍼일 뿐이라는 점을 깨달으십시오.

$ head /usr/bin/colordiff
#!/usr/bin/perl -w

########################################################################
#                                                                      #
# ColorDiff - a wrapper/replacment for 'diff' producing                #
#             colourful output                                         #
#                                                                      #
# Copyright (C)2002-2012 Dave Ewart ([email protected])              #
#                                                                      #
########################################################################

이는 Perl 스크립트이므로 Perl 디버거를 통해 실행하여 무슨 일이 일어나고 있는지 확인할 수 있습니다.

$ echo "123" | perl -d /usr/bin/colordiff <(echo "123") -

여기서 결론은 colordiffSTDIN()을 통해 -입력을 받을 수 있는 기능이 없으며 파일에서 입력을 받도록 설계되었다는 것입니다.

검색 결과 이 ​​기능이 누락된 것과 관련된 몇 가지 버그가 발견되었습니다.

colordiff의 개발 지점

github에서 이걸 찾았는데,킴멜/콜로디프. 소스 코드를 대략적으로 살펴보니 STDIN을 더 잘 처리하는 새 버전이 있는 것 같습니다.

유효한 대체 양식

diff를 사용하여 diff를 생성한 다음 나중에 출력을 파이프 할 수 있습니다 colordiff.

$ echo "123" | diff -u <(echo "123") - | colordiff

daveewart의 fork/branch 에서 이것을 찾았습니다 colordiff.github에서 찾을 수 있습니다. 라고 부를 수 있는 다른 양식이 꽤 많이 있으며 colordiff아마도 그 중 하나가 귀하의 필요에 적합할 것입니다.

관련 정보