échappement dans un sous-shell
Sujet: échappement dans un sous-shell De: p.cornillet (l' arobase) laposte.net (Cornillet Pascal) Groupes: fr.comp.developpement
Organisation: Guest of TISCALI - FRANCE
Date: 02. Mar 2008, 20:57:44
Bonsoir,
il apparaît que je m'étais trompé dans mon précédent post et que j'avais mal
identifié la source du problème, qui n'est pas spécifique à Mac OS X.
Le problème (plus vicieux qu'il n'y parait de prime abord) est qu'un des
arguments d'une commande de compilation dans un Makefile doit contenir des
espaces pour être interprété comme un seul argument et non tronqué en deux.
Ainsi si on réalise un petit script de test appelé 'count.sh' qui compte
juste le nombre d'arguments avec :
echo $#
si on l'exécute avec :
../count.sh "a a"
1
on obtient bien ce qu'on recherche qui est un seul argument.
Mais dans mon Makefile les arguements sont générés à partir d'une commande
de type `lib-config --cflags` que beaucoup de bibliothèques fournissent
pour aider la portabilité des commandes de compilation.
Mais dans mon cas certains arguments doivent être modifiés avec sed, d'où le
problème ci-dessous :
../count.sh `echo foo | sed -e 's/foo/"a a"/g'`
2
Ici on vois bien que les guillemets double ont disparues,
et que l'argument est interprété comme deux arguments :
../count.sh a a
2
Malheureusement aucun caractère d'échappement ne semble résoudre ce
problème.
J'ai alors pensé au HTML qui a des espaces insécables
et ceci fonctionne :
../count.sh a\ a
1
mais encore une fois, ce caractère placé dans le sous-shell disparaît
cordialement comme les guillemets :
../count.sh `echo foo | sed -e 's/foo/a\ a/g'`
2
Je ne veux pas croire qu'il n'y ai aucun moyen pour résoudre ce problème.
Est-ce que quelqu'un aurait une idée ?
|
|