Problème utilisation variable dans un shell.
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:
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:
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:
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:
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.
Problème utilisation variable dans un shell.
al1_24 Ta solution semble être la bonne, ça marche parfaitement pour cet exemple, je n'avais pas pensé à "eval" c'est mémorisé.
N_BaH
Il manque quelque chose dans ta solution. En ce qui concerne le shebang tout à fait d'accord avec toi, c'est l'habitude de toucher a des sh ,mais même punition que ce soit bash ou sh.
Très sincèrement Merci à tous deux pour vous être penché sur mon cas. J'appliquerai ses motifs cet après-midi sur mon script.