web-dev-qa-db-ja.com

colordiffがstdinで機能しないのはなぜですか?

1つのファイルと1つの入力がパイプから来ています。それらは同一です。では、なぜcolordiffは違いを報告するのですか?:

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

これが問題の原因であるcolordiffのようです。純粋な差分で、すべてが正常に機能します。

3
Martin Vegter

Diffを使用する

これは私のために働きます。 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を使用して示したように、実際にはこれら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(-)、ファイルからの入力のみを受け取るように設計されています。

この機能の欠如に関して提出されたいくつかのバグがあります。

Colordiffの開発部門

私はこれをgithubで見つけました kimmel/colordiff 。ソースをざっと見てみると、STDINをより適切に処理する新しいバージョンのようです。

動作する代替フォーム

diffを使用して差分を生成し、その後、出力をcolordiffにパイプすることができます。

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

これは、daveewartのcolordiffのフォーク/ブランチで見つかりました ここではgithubで入手できますcolordiffと呼ぶことができる他のフォームはかなりたくさんあり、おそらくそのうちの1つがニーズに合うでしょう。

8
slm