1つのファイルと1つの入力がパイプから来ています。それらは同一です。では、なぜcolordiff
は違いを報告するのですか?:
echo "123" | colordiff <(echo "123") -
1d0
< 123
これが問題の原因であるcolordiffのようです。純粋な差分で、すべてが正常に機能します。
これは私のために働きます。 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 <(echo "123") <(echo "123")
$
ただし、echo
を使用して示したように、実際にはこれら2つの文字列は異なるものとして報告されます。
$ 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") -
ここで重要なのは、colordiff
がSTDIN(-
)、ファイルからの入力のみを受け取るように設計されています。
この機能の欠如に関して提出されたいくつかのバグがあります。
私はこれをgithubで見つけました kimmel/colordiff 。ソースをざっと見てみると、STDINをより適切に処理する新しいバージョンのようです。
diff
を使用して差分を生成し、その後、出力をcolordiff
にパイプすることができます。
$ echo "123" | diff -u <(echo "123") - | colordiff
これは、daveewartのcolordiff
のフォーク/ブランチで見つかりました ここではgithubで入手できます 。 colordiff
と呼ぶことができる他のフォームはかなりたくさんあり、おそらくそのうちの1つがニーズに合うでしょう。