15/11/2024

LinuxServices

Tips & tricks avec le shebang sous Linux

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.

author avatar
Philippe PIERRE
A exercé de nombreuses années en tant qu'administrateur de base de données et comme administrateur Système Unix/Linux. Il a enseigné les réseaux au CNAM (Paris). Aujourd'hui, employé en tant qu'ingénieur infrastructure, au sein d'un laboratoire pharmaceutique et administrant un cluster de calculs HPC, il connaît parfaitement les environnements GNU/Linux dans le cadre d'une entreprise et des systèmes de haute disponibilité. Il aime partager son expérience.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.