Multiple arguments on a #! line

Scott Paul Robertson spr at mahonri5.net
Sat Jan 6 01:00:26 MST 2007


On Fri, Jan 05, 2007 at 11:22:46PM -0700, Byron Clark wrote:
> Now, I should be able to use this in a #! line to "run" a script, so I
> wrote the following script that does absolutely nothing and called it
> test.sh and made it executable.
<snip>
> 
> #!/tmp/test -u -tt
> 
> Here's what happens when I run test.sh:
> 
> $ ./test.sh
> [0] /tmp/test
> [1] -u -tt
> [2] ./test.sh
> 
> So, _why_ are the command line arguments being combined into a single
> argument?  
> 

Most Unix systems[1] will only parse a single option, in a very
unintelligent way: the option passed is the first non-whitespace
character until the end of the line.

Because of this a #! will lump all the options as one. Try leaving some
trailing whitespace, it'll preserve it as well. This is more tradition
than anything, apparently POSIX doesn't say anything about handling #!
lines. Linux goes the traditional route.

Interesting side note, on OS X the kernel handles multiple arguments:
$ ./test.sh
[0] /Users/spr/test
[1] -u
[2] -tt
[3] ./test.sh

That got me mad because I could do what you're wanting to do on my OS X
box, but in Linux it kept messing up.

Scott

[1] From Classic Shell Scripting, O'Reilly

-- 
Scott Paul Robertson
http://spr.mahonri5.net
GnuPG FingerPrint: 09ab 64b5 edc0 903e 93ce edb9 3bcc f8fb dc5d 7601
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 186 bytes
Desc: not available
Url : http://plug.org/pipermail/plug/attachments/20070106/949513c0/attachment.bin 


More information about the PLUG mailing list