Some reword and syntax corrections
This commit is contained in:
parent
e89330e284
commit
e7404427a4
1 changed files with 28 additions and 14 deletions
|
@ -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
|
||||
[34mDEBUG: We will display a message[0m
|
||||
Test Message
|
||||
[34mDEBUG: We will display an error[0m
|
||||
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue