ファイルとパイプの入力があります。彼らは同じです。それでは、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") -
ここでの結論は、colordiff
STDIN()を介して-
入力を受け取る機能がなく、ファイルから入力を受け取るように設計されていることです。
検索結果この機能の欠落に関連するいくつかのバグが見つかりました。
- colordiff:引数が指定された場合は機能しませんが、stdinを使用するシェルスクリプトの一部として機能します。
- 回答:[bug-diffutils]標準入力と比較したBUG
- Re: [colordiff-misc] 標準入力処理エラー
colordiffの開発ポイント
githubでこれを見つけましたが、キンメル/コロディフ。ソースコードを大まかに見てみると、STDINをよりよく処理する新しいバージョンがあるようです。
有効な代替フォーム
diff
を使用してdiffを作成し、後で出力をパイプすることができますcolordiff
。
$ echo "123" | diff -u <(echo "123") - | colordiff
daveewartのfork / branchでこれを見つけましたcolordiff
。githubで見つけることができます。と呼ぶことができる他のフォームがかなりたくさんあり、colordiff
おそらくそれらの1つはあなたのニーズに適しています。