Inleiding
Oorspronkelijk hadden we alleen een shell op Unix. Toen liep een opdracht, het reservoir zou proberen te beroepen op een van de exec () system calls op. Het was de opdracht een uitvoerbaar, de exec zou slagen en het commando zou lopen. Als de exec () is mislukt, wordt het reservoir niet zou opgeven, in plaats zou proberen om het commando bestand als ware het een shell script. Dit werkt prima, zolang er maar een reservoir op het systeem. Maar wat als u gebruik maakt van een shell als uw interactieve en wilt uitvoeren van een script geschreven in een andere schaal de taal?
Dit is waar de #! truc komt inch Het idee van het gebruik van # om een reactie ontstaan met csh en werd al snel toegevoegd aan de Bourne shell. Nu zijn alle houders weten te negeren spul na een #. Dus kunnen we een leidende lijn iets als "#! / Usr / bin / ksh". Aan het reservoir van deze regel is slechts een opmerking. Maar als de kernel probeert om een bestand met deze lijn, dan zal de opgegeven exec tolk en pas het script aan. Dus shell scripts uitvoerbaar geworden behoorlijk veel als echte executables zijn. Nu bij een shell probeert te exec een shell script, het lukt.
Wat als u de #! lijn? Nou, de kernel exec zal mislukken. Uw gemiddelde schaal zullen dan proberen het script zelf. Een paar granaten zullen proberen te inspecteren het script om te proberen te raden de taal. Dit is niet goed. Je kan worden uitgevoerd ksh als uw interactieve shell en schrijven ksh scripts. Als je later switch to bash als een interactieve shell, enkele van uw scripts kunnen blijven lopen, terwijl anderen misschien niet. Ook de lijn
is een opmerking dat is een belangrijke aanwijzing voor een programmeur die kijkt naar het script om het te begrijpen. Weten welke taal de auteur probeert te gebruiken is een grote hulp.
Hoewel ik heb gebruikt de term 'shell', eigenlijk deze techniek kan gebruikt worden met de vele programma's die niet schelpen. Hier is een "script" om een meerregelige bericht:
Code:
#! /usr/bin/cat
Line 1
Line 2
Line 3