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
|
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
|
||||||
[34mDEBUG: We will display a message[0m
|
[34mDEBUG: We will display a message[0m
|
||||||
Test Message
|
Test Message
|
||||||
[34mDEBUG: We will display an error[0m
|
[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
|
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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue