Tips & tricks avec le shebang sous Linux
Sommaire
I. Présentation
Pour faire suite à l’excellent article concernant le shebang rédigé par Florian, il y a peu, je vous propose ici de voir quelques petites astuces concernant ce précieux indicateur d’environnement des langages de programmation.
Vous vous souvenez sans doute que le shebang est cette ligne d’indication mentionnée dans chaque script : qu’il s’agisse d’un Shell, d’un script Perl ou Python ou autre, généralement exprimée au format suivant :
#!<Path Interperter>
Nous allons voir maintenant qu’il existe quelques petites astuces permettant de compléter les fonctionnalités de cet indicateur d’environnement de programmation.
II. Ajout de commutateurs
En premier lieu, il est tout à fait possible d’ajouter certains commutateurs sur la même ligne déclarative du shebang. Par exemple, lorsque l’on souhaite tracer l’intégralité des commandes exécutées, on peut émettre le shebang suivant :
#!/bin/bash -x
Ainsi, votre script affichera chaque ligne avant de l’exécuter. Il est également possible de faire en sorte d’interrompre l’exécution du script dès la première erreur rencontrée grâce à l’option -e :
#!/bin/bash -e
Bien évidemment, on peut tout à fait associer les deux fonctionnalités en utilisant la ligne déclarative suivante :
#!/bin/bash -xe
III. Shebang & environnement
Il n’est pas irréaliste d’utiliser le pointeur d’environnement /usr/bin/env afin de rechercher le chemin de l’interpréteur souhaité csh, bash, sh…Pour se faire, il suffit d’utiliser le shebang suivant :
#!/usr/bin/env <Interperter>
REMARQUE : bien évidemment il faut au préalable s’assurer que le binaire env se trouve bien dans l’arborescence mentionnée /usr/bin. Par ailleurs, cela permet de rendre plus générique l’appel à l’interpréteur. Il peut s’agir aussi bien d’un script Shell que d’un programme Python ou Perl, pour lequel on aura placé le chemin d’accès dans la variable d’environnement PATH.
Par ailleurs, dans certains cas de figure, il est possible de faire en sorte de passer l’interpréteur et ses arguments comme une seule et même chaîne. Par exemple, lorsque l’on utilise un environnement Cygwin où les invocations d’interpréteurs complexes peuvent s’effectuer au travers de l’utilisation de wrapper supplémentaires, on peut alors mettre en place le shebang ci-dessous :
# !/usr/bin/env python -c
IV. Script de manipulation de chaines et de fichiers
Il existe une certaine commande dans les environnements Unix/Linux permettant de traiter les lignes ou les chaînes de caractères au sein des fichiers. Je veux parler de awk (ou nawk pour les versions plus récentes). Cet utilitaire n’échappe pas non plus à l’utilisation du shebang car il peut permettre de gérer des scripts awk :
#!/usr/bin/awk
ATTENTION : si jamais vous appliquez le principe mentionné ci-dessus concernant l’ajout d’indicateurs en utilisant alors l’option -f, si votre binaire awk ne se trouve pas là où le chemin du shebang le précise alors le script retournera systématiquement la valeur ‘false’ et le script devient alors inutilisable.