[Script bash] Problème caractère echappement
Résolu
letitibleu
Messages postés
4
Statut
Membre
-
letitibleu Messages postés 4 Statut Membre -
letitibleu Messages postés 4 Statut Membre -
Bonjour,
Voici le script test.sh :
Ce script est exécuté par un logiciel, donc les arguments passés en paramètres ne sont pas modifiables. Voici un exemple
1er cas :
==> Si on visualise le fichier essai, tout les champs sont complétés.
2ième cas :
==> Tous les champs du fichier essai ne sont pas complétés. Le script est coupé. Cela se produit uniquement lorsque le script rencontre une chaine de caractère avec "\c", qui doit être interprété comme une chaine d'échappement je pense ?
Comment faire pour ignorer cette fonction ? J'ai tout essayé mais sans succès........
Merci.
Voici le script test.sh :
#!/bin/ksh
echo $* | /usr/bin/nawk ' BEGIN { FS=" # " } { split("EMAIL:TITLE:REGLE:DELAI:NBDISCR:HOSTNAME:CT1:CT2:MESSAGE:FILENAME:HOSTIP:USERNAME:EVENTID:AGENT:EVENTTIME", champs, ":") } { for ( x in champs ) { printf("%s=\"%s\"\n",champs[x],$x); } } ' > essai
Ce script est exécuté par un logiciel, donc les arguments passés en paramètres ne sont pas modifiables. Voici un exemple
1er cas :
./test.sh "test@test.fr # Detection d'une menace non supprimee # RG000 # 30 # 3 # TESTTEST # W32/Spybot. worm.gen.a # trojan # ePO detected an event File infected. Undetermined clean error. Quarantine failed with ID 1276 and severity 4 # c:\documents and settings\ly0000\dookies\ly0000@serving-sys[1].txt # 00.00.00.00 # SYSTEM # 0000000-0000-0000-0000-000000000 # ePO_A00 # 2002-08-12~14:17:18~24~EST"
==> Si on visualise le fichier essai, tout les champs sont complétés.
2ième cas :
./test.sh "test@test.fr # Detection d'une menace non supprimee # RG000 # 30 # 3 # TESTTEST # W32/Spybot. worm.gen.a # trojan # ePO detected an event File infected. Undetermined clean error. Quarantine failed with ID 1276 and severity 4 # c:\documents and settings\ly0000\cookies\ly0000@serving-sys[1].txt # 00.00.00.00 # SYSTEM # 0000000-0000-0000-0000-000000000 # ePO_A00 # 2002-08-12~14:17:18~24~EST"
==> Tous les champs du fichier essai ne sont pas complétés. Le script est coupé. Cela se produit uniquement lorsque le script rencontre une chaine de caractère avec "\c", qui doit être interprété comme une chaine d'échappement je pense ?
Comment faire pour ignorer cette fonction ? J'ai tout essayé mais sans succès........
Merci.
A voir également:
- [Script bash] Problème caractère echappement
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Script vidéo youtube - Guide
- Caractere vide - Guide
2 réponses
Salut,
Avec un shell "bash" et un shebang "#!/bin/sh", les 2 lignes d'arguments passent très bien.
Avec un shell "bash" et un shebang "#!/bin/ksh", ça passe aussi mais le "\c" est suvrée au passege (c:\documents and settings\ly0000ookies\ly0000@serving-sys[1].txt) ;-))
Par contre avec un shell "ksh", c'est vrai que la ligne d'argument avec le "\cookies" ne renvoie que des valeurs vides ;-((
Seule solution envisageable, modifier les arguments en entrée en remplaçant toutes chaînes commençant par "\c" par "\\\c" et là ça marche ;-))
Avec un shell "bash" et un shebang "#!/bin/sh", les 2 lignes d'arguments passent très bien.
Avec un shell "bash" et un shebang "#!/bin/ksh", ça passe aussi mais le "\c" est suvrée au passege (c:\documents and settings\ly0000ookies\ly0000@serving-sys[1].txt) ;-))
Par contre avec un shell "ksh", c'est vrai que la ligne d'argument avec le "\cookies" ne renvoie que des valeurs vides ;-((
Seule solution envisageable, modifier les arguments en entrée en remplaçant toutes chaînes commençant par "\c" par "\\\c" et là ça marche ;-))
Merci pour ta réponse jipicy, le problème c'est que je ne peux pas modifier les arguments en entrée car ils sont dynamiques et envoyés à partir d'un logiciel....
J'ai testé en remplaçant la ligne "#!/bin/ksh" par "#!/bin/sh", ça n'a pas marché.
Par contre j'ai essayé également de supprimer la ligne "#!/bin/ksh" et là ça marche y compris pour le deuxième cas !!
Comme quoi ça tient à peu de chose, merci pour ton aide !
J'ai testé en remplaçant la ligne "#!/bin/ksh" par "#!/bin/sh", ça n'a pas marché.
Par contre j'ai essayé également de supprimer la ligne "#!/bin/ksh" et là ça marche y compris pour le deuxième cas !!
Comme quoi ça tient à peu de chose, merci pour ton aide !