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
Tags: bash, script, pl-fr
Date: 2022-01-30 1:30
Modified: 2022-01-30 13:56
Cover: assets/backgrounds/article_bash_messages.jpg
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
de messages dans un fichiers que nous pourrons ensuite inclure dans nos scripts
à l'aide de la commande `source`.
messages de sorties de nos scripts *bash*. L'idée ici est de proposer trois
types de messages dans un fichier que nous pourrons ensuite inclure dans nos
scripts à l'aide de la commande `source`.
Ces messages seront de 3 types différents:
@ -52,11 +53,11 @@ error() {
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
`SRDERR`.
**la sortie d'erreur**.
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.
Nous aborderons le sujets dans la partie suivante.
variable `message`. Ainsi les séquences échappées par un antislash seront
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
que notre librairie avec le code suivant:
@ -65,7 +66,7 @@ que notre librairie avec le code suivant:
#!/usr/bin/env bash
# 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.
source message.sh || { >&2 printf "Can't load message.sh"; exit 1; }
@ -111,24 +112,31 @@ de débogages
debug() {
local message="$*"
[[ -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"
}
error() {
local message="$*"
# \e[31m permet de choisir le rouge
[ -n message ] && >&2 msg "\e[31mERROR: $message\e[0m"
}
```
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
variable `$message` est important: **`printf` interprètera nos commande
échappées avec l'antislash**.
variable `$message` est important dans notre fonction `msg`: **`printf`
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)
de notre script dans un fichier voici son contenu ouvert dans `vim`:
```none
$ DEBUG=1 ./test.sh >error.txt 2>&1
$ vim error.txt
DEBUG: We will display a message
Test Message
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
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 :
* 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.
* 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
date / heure au début de la ligne.
* 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 :
@ -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 :
```bash
@ -289,7 +301,7 @@ DEBUG [./test.sh:main]: We will display a 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`.
## 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
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
script.
Les fichiers d'exemple sont disponibles [ici]({attach}files/scripts.tar.gz).
[l_w_timestamp]:https://fr.wikipedia.org/wiki/Heure_Unix