GNU bug report logs - #78910
tail does not support -r added by POSIX.1-2024

Previous Next

Package: coreutils;

Reported by: Collin Funk <collin.funk1 <at> gmail.com>

Date: Fri, 27 Jun 2025 05:37:03 UTC

Severity: normal

Full log


View this message in rfc822 format

From: Pádraig Brady <P <at> draigBrady.com>
To: 78910 <at> debbugs.gnu.org
Subject: bug#78910: tail does not support -r added by POSIX.1-2024
Date: Fri, 27 Jun 2025 10:31:07 +0100
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




This bug report was last modified 38 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.