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.
et le fichier de log:
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
Déjà ce script on ne peut plus simple échoue car il devrait me renvoyer les valeurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7cat fichierlog ERROR TOTO ERRORTOTO ERROR TITI ERRORTITI ERROR TUTU
Or il me renvoie toutes les valeurs soit:ERROR TOTO ERROR TITI ERROR TUTU.
En faisant un bash -x du script j'obtiens:ERROR TOTO ERRORTOTO ERROR TITI ERRORTITI ERROR TUTU
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.
Partager