Если в файле содержится больше одной строки и в конце последней строки нет символа "возврата каретки", то tac выводит последние две строки как одну. В coreutils 6.9, судя по diff между старым и новым tac.c, это тоже воспроизводится. Steps to Reproduce: 1.echo first >>testfile 2.echo second >>testfile 3.echo -n third >>testfile 4. tac testfile Actual Results: thirdsecond first Expected Results: third second first
Из-за этого "бага" в etcnet будут некорректно обрабатываться файлы ipv[46]rule,route и правила *tables при "остановке", если нет символа перевода строки в последней строке.
Я не знаю, это bug или нет. Напишите, пожалуйста, на bug-coreutils@gnu.org
Я считаю, что это баг. Если tac(1) читает построчно, то выводить тоже должен построчно. Склейка последней и предпоследней строк в одну строку в случае no newline at EOF явно противоречит идее "построчно". По аналогии можно, рассмотрим работу sort(1): $ printf 'B\nA' |sort A B $ Если бы sort(1) вывел "AB", то это был бы номер.
Вариант согласования с документацией 'info tac': если встречаем EOF без окончательно сепаратора, то такой EOF сам по себе канает за сепаратор. В противном случае два последних records -- последний и предпоследний -- безвозвратно склеиваются, что вряд ли логично. $ echo -n a:b:c |tac -b --separator=: :c:ba$
Я не готов трактовать это поведение как ошибочное, Изложите, пожалуйста, вашу точку зрения на bug-coreutils@gnu.org