Den 15 Apr 2001 10:14:44 +0200 skrev Peter Makholm:
>Steen Suder <CAB@earthling.net> writes:
>
>> Husk den første linie (#!/bin/sh); den er vigtig da shell'en
>> sandsynligvis ellers ikke vil vide hvad den skal gøre med resten.
>
>Jeg ved ikke lige hvad POSIX siger om evenstående, men linux/bash ser
>ud til at bruge et eller andet fornuftigt:
>
>xyzzy% /bin/sh --login --posix
>sh-2.04$ cat /tmp/testscript
>echo "testscript"
>sh-2.04$ /tmp/testscript
>testscript
>sh-2.04$
>
>(Om den så bruger min standardkomandolinjefortolker, /bin/sh eller
>noget helt andet har jeg ikke lige nogen ide til at finde ud af)
Når du kalder et script fra shell'en, vil den forsøge flg:
1. lave en exec() på scriptet.
Hvis scriptet er 755 (eller tilsvarende), og starter med #!/bin/sh
eller en anden magic værdi (fx. "^?ELF") sørger exec for at udføre
scriptet.
2. Hvis exec'en fejler, prøver shell'en selv at fortolke filen. Dvs
hvis man bruger bash, er det bash der fortolker den - bruger man
csh er det csh der fortolker den[1].
I dit eksempel er det pkt. 2 der sørger for at fortolke scriptet.
Hvis et andet program (fx. cron eller sendmail) kalder scriptet,
vil kun pkt. 1 blive udført. Derfor bør man altid starte et script
med #!/bin/sh (eller #!/bin/csh eller #!/bin/cat ...).
Mvh
Kent
[1] Csh har muligvis en måde selv at finde ud af at det ikke er et
c-shell-script og kalder /bin/sh i stedet, men hvis det er tilfældet,
gælder det kun csh.
--
http://www.celebrityshine.com/~kfr - sidste billede: planets.png