2009-03-30 2 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를 텍스트의 작은 덩어리의은 diff를 얻을 수 있습니다. 내가 wdiff 그것을 수행하려고하지만 때, 단어에 대한 DIFF가 아니라 라인, 나는 유용한 출력을 얻을

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

UPDATE : 이것에 대한 기존의 우분투 버그보고있다 같습니다 https://bugs.launchpad.net/ubuntu/+source/wdiff/+bug/160912

답변

9

stracewdiffstat 개의 파일 (아마도 크기를 알 수 있음)을 나타냅니다.

 
$ 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

내 wdiff가 깨진 것 같아요.

+1

이 대답은 wdiff가 실제로 깨진 증거를 제공한다는 점을 감안할 때 투표 해주십시오. –

+1

그 이유는 아마도 단순한 진술이 많은 도움이되지 않기 때문일 것입니다 (나는 downvote하지 않았습니다). –

관련 문제