Some reword and syntax corrections

This commit is contained in:
Yorick Barbanneau 2022-01-30 14:12:33 +01:00
parent e89330e284
commit e7404427a4

View file

@ -2,12 +2,13 @@ Title: Bash avancé: Gérer les messages
Category: sysadmin Category: sysadmin
Tags: bash, script, pl-fr Tags: bash, script, pl-fr
Date: 2022-01-30 1:30 Date: 2022-01-30 1:30
Modified: 2022-01-30 13:56
Cover: assets/backgrounds/article_bash_messages.jpg Cover: assets/backgrounds/article_bash_messages.jpg
Dans ce premier article de l'année 2022, nous allons voir comment gérer les Dans ce premier article de l'année 2022, nous allons voir comment gérer les
messages de sorties de nos scripts Bash. L'idée ici est de proposer trois type messages de sorties de nos scripts *bash*. L'idée ici est de proposer trois
de messages dans un fichiers que nous pourrons ensuite inclure dans nos scripts types de messages dans un fichier que nous pourrons ensuite inclure dans nos
à l'aide de la commande `source`. scripts à l'aide de la commande `source`.
Ces messages seront de 3 types différents: Ces messages seront de 3 types différents:
@ -52,11 +53,11 @@ error() {
Vous remarquez que les fonctions `error` et `debug` utilisent la fonction Vous remarquez que les fonctions `error` et `debug` utilisent la fonction
`message` mais son appel est précédé de `>&2` afin que la sortie se fasse sur `message` mais son appel est précédé de `>&2` afin que la sortie se fasse sur
`SRDERR`. **la sortie d'erreur**.
Le `printf` de notre fonction `msg` utilise `%b` pour afficher le contenu de la Le `printf` de notre fonction `msg` utilise `%b` pour afficher le contenu de la
`message`. Ainsi les séquences échappées par un antislash seront interprétées. variable `message`. Ainsi les séquences échappées par un antislash seront
Nous aborderons le sujets dans la partie suivante. interprétées. Nous aborderons le sujets dans la partie suivante.
Pour les tester, créons un script `test.sh` dans le même répertoire Pour les tester, créons un script `test.sh` dans le même répertoire
que notre librairie avec le code suivant: que notre librairie avec le code suivant:
@ -65,7 +66,7 @@ que notre librairie avec le code suivant:
#!/usr/bin/env bash #!/usr/bin/env bash
# inclusion de notre librairie de message, il ne faut pas oublier # inclusion de notre librairie de message, il ne faut pas oublier
# d'afficher une erreur et teminer notre script si il y a un problème # d'afficher une erreur et teminer notre script s'il y a un problème
# lors de son chargement. # lors de son chargement.
source message.sh || { >&2 printf "Can't load message.sh"; exit 1; } source message.sh || { >&2 printf "Can't load message.sh"; exit 1; }
@ -111,24 +112,31 @@ de débogages
debug() { debug() {
local message="$*" local message="$*"
[[ -z $DEBUG || $DEBUG -ne 1 ]] && return [[ -z $DEBUG || $DEBUG -ne 1 ]] && return
# \e[34m permet de choisit la couleur bleu pour afficher notre message
# \e[0m permet de revenir à la normale
[ -n "$message" ] && >&2 msg "\e[34mDEBUG: $message\e[0m" [ -n "$message" ] && >&2 msg "\e[34mDEBUG: $message\e[0m"
} }
error() { error() {
local message="$*" local message="$*"
# \e[31m permet de choisir le rouge
[ -n message ] && >&2 msg "\e[31mERROR: $message\e[0m" [ -n message ] && >&2 msg "\e[31mERROR: $message\e[0m"
} }
``` ```
Ici la commande `\e[34m` permet de choisir la couleur bleue et `\e[0m` de Ici la commande `\e[34m` permet de choisir la couleur bleue et `\e[0m` de
revenir à la normale. C'est ici que le choix de `%b` pour le formatage de la revenir à la normale. C'est ici que le choix de `%b` pour le formatage de la
variable `$message` est important: **`printf` interprètera nos commande variable `$message` est important dans notre fonction `msg`: **`printf`
échappées avec l'antislash**. interprètera nos commandes échappées avec l'antislash**.
La couleur c'est bien, mais si on décide de rediriger une sortie (ou les deux) La couleur c'est bien, mais si on décide de rediriger une sortie (ou les deux)
de notre script dans un fichier voici son contenu ouvert dans `vim`: de notre script dans un fichier voici son contenu ouvert dans `vim`:
```none ```none
$ DEBUG=1 ./test.sh >error.txt 2>&1
$ vim error.txt
DEBUG: We will display a message DEBUG: We will display a message
Test Message Test Message
DEBUG: We will display an error DEBUG: We will display an error
@ -148,15 +156,19 @@ comme dans la plupart des applications qui effectuent de la journalisation. Bash
dispose d'un opérateur de test permettant de savoir si la sortie demandée est un dispose d'un opérateur de test permettant de savoir si la sortie demandée est un
terminal interactif ou non: `-t`. terminal interactif ou non: `-t`.
Il est aussi intéressant de ne pas inclure les informations de couleur lors de
la redirection de la sortie vers un fichier, le problème évoqué dans la partie
précédente est réglé.
Le code prend un peu de poids : Le code prend un peu de poids :
* On ajoute une condition dans chacune de nos trois fonction d'origine afin de * On ajoute une condition dans chacune de nos trois fonctions d'origine afin de
tester le type de sortie. tester le type de sortie.
* On y ajoute une fonction `log` qui se charge de traiter notre sortie * On y ajoute une fonction `log` qui se charge de traiter notre sortie
lorsque elle est redirigée vers un fichier en ajoutant une information de lorsque elle est redirigée vers un fichier en ajoutant une information de
date / heure au début de la ligne. date / heure au début de la ligne.
* Le format de cette date est paramétrable à l'aide de la variable `$DATE_FMT`, * Le format de cette date est paramétrable à l'aide de la variable `$DATE_FMT`,
dans l'exemple un *timestamp*. dans l'exemple un [*timestamp*](l_w_timestamp).
Voici le nouveau code : Voici le nouveau code :
@ -265,7 +277,7 @@ myfunct() {
} }
``` ```
Et modifions notre fichier `test.sh` afin d'inclure notre fichier comme Et modifions notre fichier `test.sh` afin de *"sourcer"* notre fichier comme
ci-dessous : ci-dessous :
```bash ```bash
@ -289,7 +301,7 @@ DEBUG [./test.sh:main]: We will display a message
Test Message Test Message
``` ```
Le fichier source et la fonction appelée sont bien affichés. Bash dispose Le fichier source et la fonction appelée sont bien affichés. *Bash* dispose
d'autre variables utiles que vous trouverez dans l'aide : `man bash`. d'autre variables utiles que vous trouverez dans l'aide : `man bash`.
## Améliorer les sorties d'erreur ## Améliorer les sorties d'erreur
@ -391,8 +403,10 @@ Nous avons vu tout au long de cet article comment utiliser des fonctions pour
afficher vos messages, que se soit pour déboguer, afficher des erreurs ou de afficher vos messages, que se soit pour déboguer, afficher des erreurs ou de
simples messages. simples messages.
Pensez que vous pouvez placer votre "bibliothèque" dans un endroit pr esent dans Pensez que vous pouvez placer votre "bibliothèque" dans un endroit présent dans
la variable d'environnement `$PATH` et ainsi l'inclure dans n'importe quel la variable d'environnement `$PATH` et ainsi l'inclure dans n'importe quel
script. script.
Les fichiers d'exemple sont disponibles [ici]({attach}files/scripts.tar.gz). Les fichiers d'exemple sont disponibles [ici]({attach}files/scripts.tar.gz).
[l_w_timestamp]:https://fr.wikipedia.org/wiki/Heure_Unix