bug#78910: tail does not support -r added by POSIX.1-2024
Pádraig Brady <[email protected]>
| Newsgroups | gmane.comp.gnu.core-utils.bugs |
|---|---|
| Message-ID | <[email protected]> |
On 27/06/2025 10:10, Pádraig Brady wrote: > On 27/06/2025 06:36, Collin Funk wrote: >> Creating this bug report since I have not been able to create a working >> implementation yet, and perhaps my looking into this will inspire others >> thoughts... >> >> POSIX-1.2024 adds the following SYNOPSIS for 'tail' [1]: >> >> tail [-f] [-c number|-n number] [file] >> tail -r [-n number] [file] >> >> Where the description for '-r' is: >> >> Copy the lines in reverse order (last line first). If -n is >> specified, that many lines of the file, starting with the last line, >> shall be copied. If -n is not specified, every line of the input >> file shall be copied. >> >> In a simple implementation of 'tail', one that allocates an array to >> store each line in memory, this would be easy to implement. However, >> the Coreutils version reads the file in BUFSIZE/getpagesize() chunks >> and then prints, repeating until completed. Therefore, we cannot just >> modify the existing code to swap lines in memory. >> >> Collin >> >> [1] https://pubs.opengroup.org/onlinepubs/9799919799/utilities/tail.html > > tail -r comes from the BSDs. > Also the BSDs don't have tac(1) which overlaps in functionality quite a bit. > I'm a bit surprised -r was added by POSIX, but fair enough. > > Thanks for flagging this. Note the GNU info doc on tail says: "GNU ‘tail’ can output any amount of data (some other versions of ‘tail’ cannot). It also has no ‘-r’ option (print in reverse), sincereversing a file is really a different job from printing the end of a file; BSD ‘tail’ (which is the one with ‘-r’) can only reverse files that are at most as large as its buffer, which is typically 32 KiB. A more reliable and versatile way to reverse files is the GNU ‘tac’ command. " BTW the POSIX tracker on this is: https://www.austingroupbugs.net/view.php?id=877 cheers, Padraig