2009-03-30 1 views
4

では動作しません:なぜwdiffは、私はbashでこれを行うことができますどのように来る名前付きパイプ

$ diff -u <(echo -e "line1\nline2") <(echo -e "line1\nline3") 
--- /dev/fd/63 2009-03-30 09:49:07.527272646 +0100 
+++ /dev/fd/62 2009-03-30 09:49:07.527272646 +0100 
@@ -1,2 +1,2 @@ 
line1 
-line2 
+line3 

つまり私は、テキストの小さな塊の差分を取得するために、名前付きパイプ/プロセスsubstituionを使用することができます。私は、wdiffと単語の差分だけでなく、ラインをそれを実行しようとすると、しかし、私は有用な出力

wdiff <(echo -e "line1\nline2") <(echo -e "line1\nline3") 
[--]{++} 

を取得していないUPDATE:https://bugs.launchpad.net/ubuntu/+source/wdiff/+bug/160912

答えて

9

straceは、wdiffstatのファイル(おそらくサイズを調べる)を示しています。

 
$ strace -efile wdiff -1 <(echo -e "line1\nline2") <(echo -e "line1\nline3") 
execve("/usr/bin/wdiff", ["wdiff", "-1", "/dev/fd/63", "/dev/fd/62"], [/* 44 vars */]) = 0 
[snip uninteresting stuff] 
stat64("/dev/fd/63", {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 
open("/dev/fd/63", O_RDONLY)   = 3 
open("/tmp/wdiff.MzPXmH", O_RDWR|O_CREAT|O_EXCL, 0600) = 4 
stat64("/dev/fd/62", {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 
open("/dev/fd/62", O_RDONLY)   = 4 
open("/tmp/wdiff.5nma9j", O_RDWR|O_CREAT|O_EXCL, 0600) = 5 
--- SIGCHLD (Child exited) @ 0 (0) --- 
unlink("/tmp/wdiff.MzPXmH")    = 0 
unlink("/tmp/wdiff.5nma9j")    = 0 
{++}Process 27699 detached 

編集:名前付きパイプが0の大きさを報告しているので、それはおそらく、両方のファイルが空のため、同じであることを前提としても、カーネルがサポートしている場合bash/dev/fdスタイルのファイル名の代わりに、名前付きパイプを使用することができることに注意してください(ほとんどの最近のものは、上記の例ではこれを示しています)、効果はほぼ同じです。

+0

うん、再現しました。 –

+0

私もそれを再現することができます。 diffもファイルを統計しますが、それでも動作します。 – Rory

-2

マイ:このため、既存のUbuntuのバグレポートがありますように見えますwdiffが壊れていると推測されます。

+1

この回答は、受け入れられた回答がwdiffが実際には壊れているという証拠を与えていることを考慮して、投票してください。 –

+1

これはおそらく単なる声明が多くの助けにならないからです(私がダウンボートしなかったことに注意してください)。 –

関連する問題