Subject: Re: script command
To: None <david@l8s.co.uk>
From: Ben Harris <bjh21@netbsd.org>
List: tech-userlevel
Date: 05/01/2003 20:48:31
[ Argh!  Forgot to Cc to the list, again! ]

In article <20030501194449.M26297@snowdrop.l8s.co.uk> you write:
>> A bit far afield but since the common direction seems to be touting
>> POS-ix, one would think that sh knew how to parse options in a similar
>> manner to, or in fact use, getopt(3), and abide by its constructs; i.e.
>> 
>> sh -c -x command -y would (try to) execute "-x", while
>> sh -x -c command -y would (try to) execute "command".

That's incorrect.  POSIX specifies that <command_string> ("command" above)
is an operand, not an option-argument, that -c doesn't take an
option-argument, and that "sh" conforms with the Utility Syntax Guidelines
(with an irrelevant exception).  Thus, the two commands above are
equivalent.

>> [note that quotes are needed around "command args..." in order to get
>> it to work properly.]

Indeed.  Your examples above set $0 to "-y" for the duration of "command",
which might not be what was intended.

>sh -c "command args" will look for a file command\ args, not execute
>command with args.

That's incorrect.  POSIX specifies that <command_string> "shall be
interpreted ... as if the string were the argument to the system()
function".  Thus, it's a little shell script in its own right.

>su is funny in posix - because 'su -' is required to behave in its
>tradional manner - which doesn't have any arguments except the'-'.

su is explicitly not specified by POSIX.

>> By comparison with Solaris, our sh is broken, btw:  Solaris behaves
>> as expected.

Be very careful using Solaris /bin/sh as an example of anything.  It's
strongly non-POSIX-compliant.  Their POSIX shell is /usr/xpg4/bin/sh.

-- 
Ben Harris                                                   <bjh21@netbsd.org>
Portmaster, NetBSD/acorn26           <URL:http://www.netbsd.org/Ports/acorn26/>