ShebangLe shebang, représenté par #!, est un en-tête d'un fichier texte qui indique au système d'exploitation (de type Unix) que ce fichier est un script (ensemble de commandes) et non un fichier binaire ; 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 ici le point d'exclamation, !)[1]. On trouve aussi d'autres dénominations : sha-bang, shabang, she-bang, hash-bang. Portabilité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 : L'existence d'un BOM en début de script n'est pas recommandée dans la mesure où 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 codage dicté par le shebang, ou lancer l'interpréteur à chaque appel, sans passer par le shebang. FonctionnementTout de suite après le shebang se trouve un chemin d'accès (exemple : 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 RemarqueOn peut utiliser la commande 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, Notes et références
|