The Tuesday 06 January 2009 09:57:41 hd, you wrote : > Bonjour, > > Je rencontre un problème avec l'expansion des variables sous bash > > J'utilise un script (que je ne peux modifier car il fait partie d'un > package tiers) qui lance un ./configure en lui passant des paramamètres > additionnels via une variable MY_ARGS > > le script est quelque chose comme : > > #!/bin/sh > .... > ./configure ${MY_ARGS} > ... > > et je le lance avec la commande : > MY_ARGS='--enable-truc CFLAGS="-g3 -O0"' ./script.sh
En fait les ' sont retirer par le shell au moment de l'évaluation de la ligne. Au final il mettra dans MY_ARGS : --enable-truc CFLAGS="-g3 -O0" ./script.sh Ensuite quand tu appelles configure avec $MY_ARGS la variable est remplacée par sa signification (Cf ligne du dessus) et le découpage est fait suivant les espaces sauf pour les variables qui étaient entre quites. Cf man bash : Expansion is performed on the command line after it has been split into words. There are seven kinds of expansion performed: brace expansion, tilde expansion, parameter and variable expansion, command substitution, arithmetic expansion, word splitting, and pathname expansion. Puis plus loin : The shell scans the results of parameter expansion, command substitution, and arithmetic expansion that did not occur within double quotes for word splitting. Autrement dit les quotes ne sont interprétés que dans la ligne de commande, pas dans les variables. Toute quote dans une variable est considérée comme un caractère (c'est comme si la quote avait été échappée par le shell). Si tu veux obtenir le résultat espéré tu vas devoir faire un eval : val [arg ...] The args are read and concatenated together into a single command. This command is then read and executed by the shell, and its exit status is returned as the value of eval. If there are no args, or only null arguments, eval returns 0. Ce qui dans ton cas donne : MY_ARGS='--enable-truc CFLAGS="-g3 -O0"' ./script.sh puis eval ./configure ${MY_ARGS} > > je m'attends à ce qu'il soit interprété comme : > ./configure --enable-truc CFLAGS="-g3 -O0" > > mais bash le transforme en : > ./configure --enable-truc 'CFLAGS="-g3' '-O0"' > ce qui fait 3 paramètres pour "./configure" au lieu de 2 > et évidemment ./configure sort en erreur en indiquant qu'il ne comprend > pas le paramètre -O0 > > Pourriez vous m'indiquer la bonne syntaxe pour que bash fasse ... ce que > je voudrais qu'il fasse > > merci Cordialement, Thomas Preud'homme -- Why debian : http://www.debian.org/intro/why_debian
signature.asc
Description: This is a digitally signed message part.