2009-03-30 2 views
4

Каким образом я могу это сделать в Баш:Почему wdiff не работает с именованными трубами

$ 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 s файлы (возможно, чтобы узнать их размер). Поскольку названные трубы сообщают размер 0, то, вероятно, предполагается, что оба файла являются пустыми и, следовательно, равны:

 
$ 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 

Edit: также отметить, что bash может использовать /dev/fd -Style имена файлов вместо именованных каналов, если ядро ​​поддерживает его (наиболее последние из них, пример выше показывает это), но эффект почти такой же.

+0

Да, воспроизведен. –

+0

Я также могу воспроизвести. diff также сохраняет файлы, но он все еще работает. – Rory

-2

Моих Предположим, что wdiff нарушен.

+1

Смешно, что этот ответ следует отклонить, учитывая, что принятый ответ свидетельствует о том, что wdiff действительно сломан. –

+1

Это, вероятно, потому, что простое заявление не очень помогает (обратите внимание, что я не сделал нисходящего). –

Смежные вопросы