diff 中的错误:没有换行符的单字符文件输出错误

diff 中的错误:没有换行符的单字符文件输出错误

考虑一下:

echo -n a > /tmp/a
echo -n b > /tmp/b
diff -B /tmp/a /tmp/b

显然,这两个文件是不同的,但是 diff 似乎认为这两个文件是相同的。我已成功在安装了 diffutils 3.3 的 Ubuntu 14.04、安装了 diffutils 2.8.1 的 CloudLinux 5.10 以及安装了 diffutils 2.8.1 的 Ubuntu 10.04 上重现了这个问题。

如果我不使用 -B 选项,问题就会消失。如果文件以换行符结尾,问题就会消失。如果文件包含超过 1 个字符,问题就会消失。

我尝试在网上搜索这种行为的解释,但没有成功。

有人能解释一下发生了什么事吗?

并且,我可以为此使用的最简单的解决方法是什么 - -B 行为对我来说很重要。

答案1

我觉得这像是 bug。我在 Ubuntu 14.04 上试过。继续报告 bug。

在某些输出模式下(ed 脚本、并排),甚至 -B 也可以工作,但在其他模式下则不行。

jaba@jaba-ubuntu:~/diffbug$ diff -e -B a b
1c
b
.
diff: a: No newline at end of file

diff: b: No newline at end of file

jaba@jaba-ubuntu:~/diffbug$ diff -y -B a b
a                               bjaba@jaba-ubuntu:~/diffbug$ 

相关内容