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実際には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") -

ここでの結論は、colordiffSTDIN()を介して-入力を受け取る機能がなく、ファイルから入力を受け取るように設計されていることです。

検索結果この機能の欠落に関連するいくつかのバグが見つかりました。

colordiffの開発ポイント

githubでこれを見つけましたが、キンメル/コロディフ。ソースコードを大まかに見てみると、STDINをよりよく処理する新しいバージョンがあるようです。

有効な代替フォーム

diffを使用してdiffを作成し、後で出力をパイプすることができますcolordiff

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

daveewartのfork / branchでこれを見つけましたcolordiffgithubで見つけることができます。と呼ぶことができる他のフォームがかなりたくさんあり、colordiffおそらくそれらの1つはあなたのニーズに適しています。

関連情報