Shebang

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

Le shebang, représenté par #!, est un en-tête d'un fichier texte qui indique au système d'exploitation que ce fichier n'est pas un fichier binaire mais un script (ensemble de commandes) ; sur la même ligne est précisé l'interpréteur permettant d'exécuter ce script.

Son nom est possiblement un mot-valise pour sharp (dièse, désignant ici improprement le croisillon, #) et bang (désignant le point d'exclamation, !)[1]. On trouve aussi d'autres dénominations : sha-bang, shabang, she-bang, hash-bang.

Portabilité[modifier | modifier le code]

Pour assurer la portabilité, ces caractères sont toujours positionnés au tout début du fichier. Sur un système compatible ASCII ou UTF-8, la séquence #! en début de fichier ne peut être codée que par deux suites d'octets : 0x23 0x21 (en ASCII ou UTF-8 sans BOM) ou 0xEF 0xBB 0xBF 0x23 0x21 (UTF-8 avec BOM). Cette séquence est considérée comme un « nombre magique » (magic number) par la facilité qu'elle offre.

L'existence d'un BOM en début de script n'est pas recommandée dans la mesure ou les anciens systèmes Unix ne tolèrent pas ce caractère. La prise en compte de ce caractère est une opération complexe[2]. Pour être compatible avec un système ainsi limité, le développeur ne dispose que de deux possibilités : coder le script avec un encodage dicté par le shebang, ou lancer l'interpréteur à chaque appel, sans passer par le shebang.

Fonctionnement[modifier | modifier le code]

Tout de suite après le shebang se trouve un chemin d'accès (exemple : #!/bin/bash). C'est le chemin vers le programme qui interprète les commandes de ce script, qu'il soit un shell, un langage de script, un langage de programmation ou un utilitaire. On peut le faire suivre des options qu'il reconnaît (par exemple -x pour un shell pour afficher le détail de son exécution). Ensuite, cet interpréteur de commandes exécute les commandes du script, en commençant au début (ligne 1), en ignorant les commentaires.

Exemples de shebang :

#!/bin/sh -x
#!/bin/bash
#!/usr/bin/perl
#!/usr/bin/tcl
#!/bin/sed -f
#!/usr/awk -f
#!/usr/bin/python -O — Execute using Python with optimizations to code

Le shebang est utilisé dans les fichiers texte de scripts dans les environnements de type Unix (GNU/Linux, BSD, etc).

Portabilité[modifier | modifier le code]

On peut utiliser le programme env au lieu d'un interpréteur de commandes pour chercher celui-ci dans le PATH (ce qui évite de devoir réécrire la première ligne des scripts si on doit les porter sur une autre machine par exemple) :

#!/usr/bin/env python

… mais le problème est que l'on risque de ne pas appeler la bonne version de l'interpréteur si plusieurs sont présentes sur la machine. Un moyen de pallier cela est de détailler le nom de l'interpréteur :

#!/usr/bin/env python2

Voire :

#!/usr/bin/env python2.7

À noter que ces commandes sont parfois équivalentes : ainsi, sur une machine où python 2.7 et python 3.0 sont installés, python2 sera généralement un lien symbolique vers python2.7. Par contre, on ne peut garantir vers quoi pointe python : sur certaines machines, il pointera vers python2, tandis que sur d'autres, il pourra pointer vers python3.

Notes et références[modifier | modifier le code]