Ошибка в diff: неверный вывод для односимвольных файлов без перевода строки

Учти это:

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

Очевидно, что эти два файла разные, но, похоже, diff считает, что файлы идентичны. Мне удалось воспроизвести эту проблему на Ubuntu 14.04 с diffutils 3.3, на CloudLinux 5.10 с diffutils 2.8.1, а также на Ubuntu 10.04 с diffutils 2.8.1.

Если я не использую опцию -B, проблема исчезнет. Если файлы заканчиваются символом новой строки, проблема исчезнет. Если файлы содержат более 1 символа, проблема исчезнет.

Я пытался найти в Интернете объяснение этому поведению, но безуспешно.

Может кто-нибудь объяснить, что происходит?

И какой самый простой обходной путь, который я мог бы использовать для этого - поведение -B важно для меня.

1 ответ

Решение

Похоже, ошибка для меня. Я попробовал это с Ubuntu 14.04. Продолжайте и сообщите об ошибке.

С некоторыми режимами вывода (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$ 
Другие вопросы по тегам