Wat betekent de regel “#!/bin/sh” in een UNIX-shellscript?

Ik was wat tutorials over shellscripts aan het doornemen en vond het volgende voorbeeldprogramma:

#!/bin/sh
clear
echo "HELLO WORLD"

Kan iemand mij vertellen wat de betekenis van de opmerking #!/bin/shaan het begin is?


Antwoord 1, autoriteit 100%

Het wordt een shebanggenoemd en vertelt de bovenliggende shell welke interpreter moet worden gebruiktom het script uit te voeren.

#!/bin/sh <--------- bourne shell compatible script
#!/usr/bin/perl  <-- perl script
#!/usr/bin/php  <--- php script
#!/bin/false <------ do-nothing script, because false returns immediately anyways.

De meeste scripttalen interpreteren een regel die begint met #als commentaaren negerende volgende !/usr/bin/whatevergedeelte, dat anders een syntaxisfout in de geïnterpreteerde taal zou kunnen veroorzaken.


Antwoord 2, autoriteit 32%

Als u een programma in unix probeert uit te voeren (een programma met de uitvoerbare bits ingesteld), kijkt het besturingssysteem naar de eerste paar bytes van het bestand. Deze vormen het zogenaamde “magische getal”, dat kan worden gebruikt om het formaat van het programma te bepalen en hoe het moet worden uitgevoerd.

#!komt overeen met het magische getal 0x2321 (zoek het op in een ascii-tabel). Wanneer het systeem ziet dat het magische getal is, weet het dat het met een tekstscript te maken heeft en leest het tot de volgende \n(er is een limiet, maar het ontgaat me atm). Nadat de tolk is geïdentificeerd (het eerste argument na de kreng) zal hij de tolk aanroepen.

Andere bestanden hebben ook magische getallen. Probeer een bitmapbestand (.BMP) te bekijken via lessen je zult zien dat de eerste twee tekens BMzijn. Dit magische getal geeft aan dat het bestand inderdaad een bitmap is.


Antwoord 3, autoriteit 8%

Als het bestand waarin dit script zich bevindt uitvoerbaar is, vertelt de hash-bang (#!) het besturingssysteem welke interpreter moet worden gebruikt om het script uit te voeren. In dit geval is het bijvoorbeeld /bin/sh.

Er is een Wikipedia-artikelover voor meer informatie.


Antwoord 4, autoriteit 4%

De eerste regel vertelt de shell dat als je het script rechtstreeks uitvoert (./run.sh; in tegenstelling tot /bin/sh run.sh), het dat programma (/bin/sh in dit geval) moet gebruiken om interpreteer het.

Je kunt het ook gebruiken om argumenten door te geven, meestal -e (afsluiten bij fout), of andere programma’s gebruiken (/bin/awk, /usr/bin/perl, etc).


Antwoord 5

#!/bin/shof #!/bin/bashmoet de eerste regel van het script zijn, want als je het niet op de eerste regel gebruikt dan zal het systeem alle commando’s in dat script als verschillende commando’s behandelen. Als de eerste regel #!/bin/shis, worden alle opdrachten als één script beschouwd en wordt aangegeven dat dit bestand wordt uitgevoerd in de opdracht psen niet de opdrachten in het bestand.

./echo.sh
ps -ef |grep echo
trainee   3036  2717  0 16:24 pts/0    00:00:00 /bin/sh ./echo.sh
root      3042  2912  0 16:24 pts/1    00:00:00 grep --color=auto echo

Other episodes