Bug in #! processing
Sławek Żak
zaks at prioris.mini.pw.edu.pl
Wed Sep 29 04:47:09 PDT 2004
Ceri Davies <ceri at submonkey.net> writes:
> On Tue, Sep 28, 2004 at 07:45:28PM +0200, S?awek ?ak wrote:
>> Hi,
>>
>> It seems that there is a long standing bug in processing of command-line
>> options for scripts and such. Take following files:
>>
[...]
>> On FreeBSD 5.x:
>>
>> thirst<zaks>(1790)% ./tst.sh
>> Main.c test
>> ./main
>> -
>> ./tst.sh
>>
>> On Solaris:
>>
>> sb8:root> ./tst.sh
>> Main.c test
>> ./main
>> -#!
>> ./tst.sh
>>
>> sb8:root> uname -a
>> SunOS sb8 5.8 Generic_108528-21 sun4u sparc SUNW,UltraAX-i2
>
> [snip Tru64 and AIX]
>
>> Any takers?
>
> It's easy enough to fix this case, but Solaris looks buggy in other
> areas
You should speel buggy as 'POSIX' in this case I guess.
> (I do not have any other systems to hand):
>
> FreeBSD 4.10-STABLE:
>
> $ cat tst.sh
> #!./main -f -o -#!
> print ok
> $ ./tst.sh
> Main.c test
> ./main
> -f
> -o
> -
> ./tst.sh
Well, it is consistent with FreeBSD 5.x in this respect. Discards all after
second #! when passing arguments to the interpretter.
> Solaris 9:
>
> $ ./tst.sh
> Main.c test
> ./main
> -f
> ./tst.sh
This behavior is mandated by POSIX which, as I reckon, allows passing of
only the first argument to the interpreter. It is confirmed by other
supposedly compliant systems. I've checked before AIX 5.2, Solaris 8/9. Two
raisins in the pie are Tru64 5.1B and HP-UX 11, which return some erm,
strange results. For such script:
#!./main 1 2 3 -#!
print ok
You get:
Main.c test
./main
1 2 3 -#!
./tst.sh
Thus it seems that the systems squeeze all arguments in one and pass it that
way to our handsome interpreter. Nevertheless both Tru64 and HPUX are
dying and we got to move on with our lives.
The behavior I'd like to have, and which seems correct is not bothering with
second, 3rd and so on occurence of #! in the first line of script. Feasible?
I guess so. The only commercial product on my systems uses -#! switch on all
platforms as a script file mark. I don't see any explanation for current
behavior therefore I'm reporting it.
/S
More information about the freebsd-current
mailing list