Je parcourais quelques tutoriels de shell script 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 de ce commentaire ? #!/bin/sh
au départ est ?
Je parcourais quelques tutoriels de shell script 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 de ce commentaire ? #!/bin/sh
au départ est ?
C'est ce qu'on appelle un shebang et indique à l'interpréteur de commandes parent l'interprète à utiliser pour exécuter le script.
#!/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.
La plupart des langages de script ont tendance à interpréter les une ligne commençant par #
en tant que commentaire et le fera ignorer les suivants !/usr/bin/whatever
qui pourrait sinon provoquer une erreur de syntaxe dans le langage interprété.
Lorsque vous essayez d'exécuter un programme sous Unix (un programme dont le bit exécutable est activé), le système d'exploitation examine les premiers octets du fichier. Ceux-ci forment ce que l'on appelle le "nombre magique", qui peut être utilisé pour déterminer le format du programme et la manière de l'exécuter.
#!
correspond au nombre magique 0x2321 (recherchez-le dans un tableau ascii). Lorsque le système voit ce nombre magique, il sait qu'il a affaire à un texte script et lit jusqu'au prochain \n
(il y a une limite, mais elle m'échappe pour l'instant). 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 numéros 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 bien un bitmap.
Si le fichier dans lequel se trouve ce script est exécutable, le hash-bang ( #!
) indique au système d'exploitation l'interpréteur à utiliser pour exécuter le script. Dans ce cas, il s'agit de /bin/sh
par exemple.
Il y a un Article de Wikipédia pour plus d'informations.
La première ligne indique à l'interpréteur de commandes 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, couramment -e (exit on error), ou utiliser d'autres programmes (/bin/awk, /usr/bin/perl, etc.).
#!/bin/sh
o #!/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
Il considérera alors toutes les commandes comme un seul script et indiquera que ce fichier est en cours d'exécution dans le fichier ps
et non les commandes contenues dans le 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
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
Shebang
2 votes
Bonne explication sur askubuntu : askubuntu.com/questions/141928/
1 votes
Duplicata possible de Pourquoi faut-il mettre #!/bin/bash au début d'un fichier script ?
0 votes
Duplicata possible de Pourquoi les gens écrivent-ils #!/usr/bin/env python sur la première ligne d'un script Python ?