Subject: bug#24894: coreutils 8.4 : `test -s` without argument does not return an error

From: Reuti <[email-masked]>
Date: Mon, 7 Nov 2016 17:56:08 +0100

> Am 07.11.2016 um 17:46 schrieb Eric Blake <[email-masked]>:
> 
> tag 24894 notabug
> thanks
> 
> On 11/07/2016 06:58 AM, BAECKEROOT Alain wrote:
>> Dear gnu-coreutils team
>> 
>> We had a funny problem caused by `test` which does return "0" when an option is given without any EXPRESSION
>> 
>> The man page says (near line 15 or so) :
>>      An  omitted  EXPRESSION defaults to false.
> 
> You are correct that it states that, but it means that 'test' (with no
> expression at all) is what results in a false return (that is, an
> omitted expression is equivalent to zero arguments).  'test -s' is NOT a
> case of an omitted expression; your expression was '-s'.  Since you
> provided exactly one argument, you are testing whether '-s' is the empty
> string (it is not, hence the true result).

Doesn't -s refer to a FILE existence, it's not -z?

But I thought in a similar way: it may be incomplete, but not omitted.

Nevertheless: the bash builtin behaves the same.

@Alain: I have no AIX, but l get the impression that test is also a ksh-builtin. Are you getting the results for both implementations?

-- Reuti

> The full POSIX rules are here:
> http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html
> 
>> I expected an error (at least return code not zero) , or it would be nice to be warned in the man page.
> 
> You are correct that the man page could probably do a bit better at
> explaining that test's behavior is STRONGLY influenced by the number of
> parameters present (and this is per POSIX rules, so it is not just
> coreutils' test implementation, but ALL conforming implementations that
> will behave the same way).
> 
>> -------------
>> reference : On *AIX* 6.1 , with IBM's test , there is an error
>> 
>> wasoi@cms054:/i/w/l/w00/was> echo $SHELL
>> /bin/ksh
>> wasoi@cms054:/i/w/l/w00/was> uname
>> AIX
>> wasoi@cms054:/i/w/l/w00/was> test -s
>> ksh: test: argument expected
> 
> That is a bug in AIX's ksh, which is not POSIX compliant.
> 
>> wasoi@cms054:/i/w/l/w00/was> echo $?
>> 1
>> 
>> This was the expected behavior :-)
> 
> Sorry, but that behavior is contrary to POSIX.
> 
>> Ce message électronique, les éventuels fichiers joints et les informations qu'il contient,
> 
> Legalese like this is unenforceable on public mailing lists; you may
> wish to use a personal email account rather than spamming us with your
> employer's garbage disclaimer.
> 
> --
> Eric Blake   eblake redhat com    +1-919-301-3266
> Libvirt virtualization library http://libvirt.org
>