J'étais en train de parcourir des didacticiels de script shell et j'ai trouvé l'exemple de programme suivant:
#!/bin/sh
clear
echo "HELLO WORLD"
Quelqu'un peut-il me dire quelle est la signification du commentaire #!/bin/sh
au début?
J'étais en train de parcourir des didacticiels de script shell et j'ai trouvé l'exemple de programme suivant:
#!/bin/sh
clear
echo "HELLO WORLD"
Quelqu'un peut-il me dire quelle est la signification du commentaire #!/bin/sh
au début?
Réponses:
Il s'appelle un shebang et indique au shell parent quel interpréteur doit être utilisé pour exécuter le script.
par exemple
#!/usr/bin/perl <--perl script'
#!/usr/bin/php <-- php script
#!/bin/false <--- do-nothing script, because false returns immediately anyways.
Il est implémenté comme un commentaire afin que tout ce qui arrive dans cette ligne ne soit pas "pertinent" pour l'interpréteur spécifié. par exemple, tous les langages de script ont tendance à comprendre qu'une ligne commençant par #
est un commentaire, et ignorent la !/usr/bin/whatever
partie, qui pourrait autrement être une erreur de syntaxe dans ce langage particulier.
exec()
système sur le fichier.
Lorsque vous essayez d'exécuter un programme sous unix (un avec le bit exécutable défini), le système d'exploitation examinera les premiers octets du fichier. Celles-ci forment le soi-disant «nombre magique», qui peut être utilisé pour décider du format du programme et comment l'exécuter.
#!
correspond au nombre magique 0x2321 (recherchez-le dans une table ascii). Lorsque le système voit que le nombre magique, il sait qu'il s'agit d'un script texte et lit jusqu'au suivant \n
(il y a une limite, mais ça m'échappe atm). Après avoir identifié l'interprète (le premier argument après le shebang), il appellera l'interprète.
D'autres fichiers ont également des nombres magiques. Essayez de regarder un fichier bitmap (.BMP) via less
et vous verrez que les deux premiers caractères sont BM
. Ce nombre magique indique que le fichier est en effet un bitmap.
Si le fichier dans lequel se trouve ce script est exécutable, le hash-bang ( #!
) indique au système d'exploitation quel interpréteur utiliser pour exécuter le script. Dans ce cas, c'est /bin/sh
, par exemple.
Il y a un article Wikipedia à ce sujet pour plus d'informations.
La première ligne indique au shell que si vous exécutez le script directement (./run.sh; par opposition à / bin / sh run.sh), il doit utiliser ce programme (/ bin / sh dans ce cas) pour l'interpréter.
Vous pouvez également l'utiliser pour passer des arguments, généralement -e (sortie en cas d'erreur), ou utiliser d'autres programmes (/ bin / awk, / usr / bin / perl, etc.).
#!/bin/sh
ou #!/bin/bash
doit être la première ligne du script car si vous ne l'utilisez pas sur la première ligne, le système traitera toutes les commandes de ce script comme des commandes différentes. Si la première ligne est #!/bin/sh
alors, il considérera toutes les commandes comme un seul script et il montrera que ce fichier s'exécute dans la ps
commande et non dans les commandes à l'intérieur du fichier.
./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
ps
, et les extraits de code comme #!/bin/sh
devraient être formatées.