[Script bash] Problème caractère echappement

Résolu/Fermé
letitibleu Messages postés 4 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 23 avril 2007 - 23 avril 2007 à 10:49
letitibleu Messages postés 4 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 23 avril 2007 - 23 avril 2007 à 13:24
Bonjour,

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:

2 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
23 avril 2007 à 12:27
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 ;-))
0
letitibleu Messages postés 4 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 23 avril 2007
23 avril 2007 à 13:24
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 !
0