【问题标题】:Why does wdiff not work with named pipes为什么 wdiff 不适用于命名管道
【发布时间】:2010-10-16 08:06:09
【问题描述】:

为什么我可以在 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

即我可以使用命名管道/进程替代来获取一小段文本的差异。但是,当我尝试使用 wdiff 时,单词的差异,而不仅仅是行,我没有得到有用的输出

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

更新:似乎有一个现有的 ubuntu 错误报告:https://bugs.launchpad.net/ubuntu/+source/wdiff/+bug/160912

【问题讨论】:

    标签: linux bash diff


    【解决方案1】:

    strace 显示 wdiff stats 文件(可能是为了找出它们的大小)。由于命名管道报告的大小为 0,它可能假定两个文件都是空的,因此相等:

    $ strace -efile wdiff -1

    编辑:还要注意bash 可以使用/dev/fd 样式的文件名而不是命名管道,如果内核支持它(最近的支持,上面的示例显示了这一点),但效果几乎相同。

    【讨论】:

    • 我也可以复制。 diff 也会统计文件,但它仍然有效。
    【解决方案2】:

    我的猜测是 wdiff 坏了。

    【讨论】:

    • 有趣的是,这个答案应该被否决,考虑到接受的答案证明 wdiff 确实被破坏了。
    • 这可能是因为单纯的陈述并没有太大帮助(请注意,我没有投反对票)。
    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 2021-07-23
    • 2012-11-12
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    相关资源
    最近更新 更多