Bonjour

Je me heurte a un pb particulièrement déroutant.
L'idée est de chercher des motifs d'erreur dans des logs en excluant les erreurs connues.

Voici un script ultra simple pour démontrer mon pb.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
#!/bin/bash
#EXCLUS="-e \"ERRORTOTO\" -e \"ERRORTITI\" -e \"ERROR TITI\""
EXCLUS="-e \"ERRORTOTO\" -e \"ERRORTITI\""
echo EXCLUS : $EXCLUS
echo "grep ERROR fichierlog | grep -v $EXCLUS"
grep ERROR fichierlog | grep -v $EXCLUS
et le fichier de log:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
cat fichierlog
 
ERROR TOTO
ERRORTOTO
ERROR TITI
ERRORTITI
ERROR TUTU
Déjà ce script on ne peut plus simple échoue car il devrait me renvoyer les valeurs

ERROR TOTO
ERROR TITI
ERROR TUTU.
Or il me renvoie toutes les valeurs soit:
ERROR TOTO
ERRORTOTO
ERROR TITI
ERRORTITI
ERROR TUTU
En faisant un bash -x du script j'obtiens:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
+ EXCLUS='-e "ERRORTOTO" -e "ERRORTITI"'
+ echo EXCLUS : -e '"ERRORTOTO"' -e '"ERRORTITI"'
EXCLUS : -e "ERRORTOTO" -e "ERRORTITI"
+ echo 'grep ERROR fichierlog | grep -v -e "ERRORTOTO" -e "ERRORTITI"'
grep ERROR fichierlog | grep -v -e "ERRORTOTO" -e "ERRORTITI"
+ grep ERROR fichierlog
+ grep -v -e '"ERRORTOTO"' -e '"ERRORTITI"'
ERROR TOTO
ERRORTOTO
ERROR TITI
ERRORTITI
ERROR TUTU

On s' aperçoit que le script enrobe les variables de simple quote et se termine donc anormalement.

Si j'ai des blancs dans mes variables c'est vraiment la cata.

ex:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
sh -x test.sh
+ EXCLUS='-e "ERRORTOTO" -e "ERRORTITI" -e "ERROR TITI"'
+ echo EXCLUS : -e '"ERRORTOTO"' -e '"ERRORTITI"' -e '"ERROR' 'TITI"'
EXCLUS : -e "ERRORTOTO" -e "ERRORTITI" -e "ERROR TITI"
+ echo 'grep ERROR fichierlog | grep -v -e "ERRORTOTO" -e "ERRORTITI" -e "ERROR TITI"'
grep ERROR fichierlog | grep -v -e "ERRORTOTO" -e "ERRORTITI" -e "ERROR TITI"
+ grep ERROR fichierlog
+ grep -v -e '"ERRORTOTO"' -e '"ERRORTITI"' -e '"ERROR' 'TITI"'
grep: TITI": Aucun fichier ou répertoire de ce type

Le shell applique un séparateur sur les blancs et casse la syntaxe.

Avez vous une idée du problème?

Avec mes remerciements pour votre aide.