Bug 11492 - /usr/bin/tac некорректно выводит файл с отсутствующим carriadge return в конце файла
Summary: /usr/bin/tac некорректно выводит файл с отсутствующим carriadge return в конц...
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: coreutils (show other bugs)
Version: unstable
Hardware: all Linux
: P2 major
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-04-12 20:05 MSD by Andrew Kornilov
Modified: 2008-08-30 16:13 MSD (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andrew Kornilov 2007-04-12 20:05:28 MSD
Если в файле содержится больше одной строки и в конце последней строки нет
символа "возврата каретки", то 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
Comment 1 Andrew Kornilov 2007-05-21 02:55:00 MSD
Из-за этого "бага" в etcnet будут некорректно обрабатываться файлы
ipv[46]rule,route и правила *tables при "остановке", если нет символа перевода
строки в последней строке.
Comment 2 Dmitry V. Levin 2007-05-21 18:24:08 MSD
Я не знаю, это bug или нет.
Напишите, пожалуйста, на bug-coreutils@gnu.org
Comment 3 at@altlinux.org 2008-03-23 03:59:52 MSK
Я считаю, что это баг.  Если tac(1) читает построчно, то выводить тоже должен
построчно.  Склейка последней и предпоследней строк в одну строку в случае no
newline at EOF явно противоречит идее "построчно".

По аналогии можно, рассмотрим работу sort(1):
$ printf 'B\nA' |sort
A
B
$

Если бы sort(1) вывел "AB", то это был бы номер.
Comment 4 at@altlinux.org 2008-03-23 04:25:05 MSK
Вариант согласования с документацией 'info tac':
если встречаем EOF без окончательно сепаратора, то такой EOF сам по себе канает
за сепаратор.  В противном случае два последних records -- последний и
предпоследний -- безвозвратно склеиваются, что вряд ли логично.

$ echo -n a:b:c |tac -b --separator=: 
:c:ba$
Comment 5 Dmitry V. Levin 2008-08-30 16:13:17 MSD
Я не готов трактовать это поведение как ошибочное,
Изложите, пожалуйста, вашу точку зрения на bug-coreutils@gnu.org