Débuguer (ou déboguer ou débugger comme vous voulez) un script en bash (ou script shell) est souvent fastidieux ; on a souvent l'impression que les variables n'en font qu'à leur tête et il faut souvent reprendre un long script ligne à ligne pour voir ce qui cloche en ajoutant des "echo" pour contrôler le contenu des variables.

En lançant vos scripts avec l'option -x c'est fini !
Pour ce faire 2 méthodes :
  • Soit changer le "shebang" à l'intérieur du fichier (la première ligne du script indiquant comment interpréter le fichier) :
#! /bin/bash -x
  • Soit lancer le script (même si celui-ci contient un shebang traditionnel de type /bin/sh ou /bin/bash) comme ceci
bash -x mon_script_a_debugger.sh

Dans un cas comme dans l'autre l'affichage passera en mode debug : vous verrez l'ensemble des programmes lancés avec les différents niveaux d'imbrication (matérialisés par des +) et verrez ainsi si vous êtes bien passé dans tel ou tel bloc, si telle ou telle boucle s'est arrêtée à temps, les valeurs des variables, etc.

C'est l'option à garder en tête quand vous faites du scripting bash.
Le jour où je l'ai découverte celle là j'étais heureux :D

Ci-dessous un exemple de script avec respectivement sa sortie standard en temps normal et avec l'option de debug...
#! /bin/sh

a=34

while [ "$a" -lt 40 ]; do
        a=`expr $a + 1`
done

echo "a vaut $a"


affichera :
a vaut 40

Si on le lance en debug...
bash -x test.sh
... affichera :
+ a=34
+ '[' 34 -lt 40 ']'
++ expr 34 + 1
+ a=35
+ '[' 35 -lt 40 ']'
++ expr 35 + 1
+ a=36
+ '[' 36 -lt 40 ']'
++ expr 36 + 1
+ a=37
+ '[' 37 -lt 40 ']'
++ expr 37 + 1
+ a=38
+ '[' 38 -lt 40 ']'
++ expr 38 + 1
+ a=39
+ '[' 39 -lt 40 ']'
++ expr 39 + 1
+ a=40
+ '[' 40 -lt 40 ']'
+ echo 'a vaut 40'
a vaut 40


Magique n'est-il pas ?
Tag(s) : #bash
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :