[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Some question regarding tail and option "-c"
From: |
Jim Meyering |
Subject: |
Re: Some question regarding tail and option "-c" |
Date: |
Thu, 04 Oct 2012 10:14:15 +0200 |
Robert Milasan wrote:
> On Wed, 03 Oct 2012 20:09:26 +0200
> "Jim Meyering" <address@hidden> wrote:
>
>> There is some documentation on the effects of that variable
>> in "info coreutils":
>>
>> 2.13 Standards conformance
>> ==========================
>>
>> In a few cases, the GNU utilities' default behavior is
>> incompatible with the POSIX standard. To suppress these
>> incompatibilities, define the `POSIXLY_CORRECT' environment
>> variable. Unless you are checking for POSIX conformance, you
>> probably do not need to define `POSIXLY_CORRECT'.
>>
>> Newer versions of POSIX are occasionally incompatible with
>> older versions. For example, older versions of POSIX required the
>> command `sort +1' to sort based on the second and succeeding fields
>> in each input line, but starting with POSIX 1003.1-2001 the same
>> command is required to sort the file named `+1', and you must instead
>> use the command `sort -k 2' to get the field-based sort.
>>
>> The GNU utilities normally conform to the version of POSIX
>> that is standard for your system. To cause them to conform to a
>> different version of POSIX, define the `_POSIX2_VERSION' environment
>> variable to a value of the form YYYYMM specifying the year and month
>> the standard was adopted. Three values are currently supported for
>> `_POSIX2_VERSION': `199209' stands for POSIX 1003.2-1992, `200112'
>> stands for POSIX 1003.1-2001, and `200809' stands for POSIX
>> 1003.1-2008. For example, if you have a newer system but are running
>> software that assumes an older version of POSIX and uses `sort +1' or
>> `tail +10', you can work around any compatibility problems by setting
>> `_POSIX2_VERSION=199209' in your environment.
>
> This doesn't make sense, I can reproduce this on openSUSE 12.1 and 12.2
> with coreutils 8.14 and 8.16.
> I don't think we are using some old POSIX standard.
The "standard for your system" mentioned above is set via definitions
in glibc header files.
You can check by seeing how lib/posixver.c is compiled or by running
a command like the following. Here's what I see on Fedora 17 and newer:
$ gcc -x c -dD -E -include unistd.h /dev/null \
|grep -E 'fine _?_POSIX2_(THIS_)?VERS'
#define __POSIX2_THIS_VERSION 200809L
#define _POSIX2_VERSION __POSIX2_THIS_VERSION
When in doubt, you can use gdb to trace through the code, too.