Rechercher : dans
Par :

[Script bash] Problème caractère echappement

Dernière réponse le 23 avr 2007 à 13:24:02 letitibleu, le 23 avr 2007 à 10:49:15 
 Signaler ce message aux modérateurs

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.
Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « [Script bash] Problème caractère echappement » dans :
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha-Bang Premièrement,...
[Shell] Tester une variable numérique VoirTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à...

1

jipicy, le 23 avr 2007 à 12:27: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 ;-))
Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

2

 letitibleu, le 23 avr 2007 à 13:24:02

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 !

Répondre à letitibleu
Collection CommentÇaMarche.net