[Linux] Question bash - creation de variable
Daniel Huhardeaux
daniel.huhardeaux@::1
Dim 29 Juin 18:38:49 CEST 2008
Jean BENOIT a écrit :
> Re,
>
> On Sat, Jun 28, 2008 at 04:00:41PM +0200, Daniel Huhardeaux wrote:
> [...]
>> environnement. Le contenu de ces variables peut également avoir été
>> modifié au préalable par un:
>>
>> ${prefix1}VAR$p=$(/bin/cat ${prefix1}VAR$p)
>
> Ça aussi, ça devrait marcher avec un eval.
>
> eval ${prefix1}VAR$p=$(/bin/cat ${prefix1}VAR$p)
>
> Remarque : attention au backquotes dans prefix1.
> Ça peut être un trou de sécurité.
> Il faut nettoyer prefix1 de tout caractère suspect : [`$\(){}'"] etc.
> Si prefix1 est figé par ton programme, pas de souci.
> Par contre, s'il peut être fourni en paramètre, le nettoyage est nécessaire.
>
> [...]
>> Le but est de stocker des valeurs de variables qui doivent être non
>> volatiles et pouvoir récupérer ces valeurs en cas d'arrêt ou crash de
>> l'application ou extinction de la machine.
>
> Ça fonctionne avec eval :
>
> for p in $LISTE; do
> eval ${prefix1}VAR$p="default"
> export ${prefix1}VAR$p
> done
>
> Il faut simplement sourcer le script pour que les variables fassent parti
> de l'environnement :
>
> . /le/chemin/du/script_qui_initialise_les_variables
Bonjour,
j'ai repris le script avec eval et je n'avance pas plus. Reprenons
l'exemple:
#!/bin/bash
cat=/bin/cat
echo=/bin/echo
path2nonvolatiles=/home/dh/tmp/variables.nonvolatiles
backupIFS=$IFS
PREFIX=HIT_ENV_
eval ${PREFIX}ROOMS='101\ 103\ 104'
ROOMS="101 103 104"
#IFS=";"
$echo ${PREFIX}ROOMS
$echo "$ROOMS"
for p in $ROOMS; do
$echo $p
done
IFS=$backupIFS
Le resultat a l'execution est:
stryx:~/bin$ ./test.sh
HIT_ENV_ROOMS <- contenant ${PREFIX}ROOMS
101 103 104 <- contenu $ROOMS
101 <- enumeration du contenu, boucle for
103
104
Si je n'échappe l'espace dans eval [...] soit donc eval
${PREFIX}ROOMS='101 103 104', j'obtiens a l'execution:
./test.sh: line 9: 103: command not found <- bash execute le contenu!
HIT_ENV_ROOMS
101 103 104
101
103
104
et ce même si IFS est positionné à ; ou virgule par ex. ou que je
remplace l'espace par un ; ou une virgule sans modifier IFS. Enfin,
comme le contenu est executé au lieu d'être affiché, cela ne m'aide pas
beaucoup ;-) un echo ${PREFIX}ROOMS et la boucle sortant tous deux cette
même erreur.
Donc j'arrive à mes fins en figeant le nom des variables mais toujours
pas si je veux les préfixer/suffixer
Jean Marc: l'export doit être réalisé après avoir initialisé les
variables avec les valeurs par défaut, puis avoir récupéré la valeur de
cette même variable stockée dans le répertoire. Ta procédure d'export
-que je n'ai pas testée- devra donc être
export eval ${prefix1}VAR$p=$(/bin/cat ${prefix1}VAR$p)
Merci pour vos idées.
--
Daniel Huhardeaux _____ ____ ____ _____ _____ _
enum +33 368 460 088 (_ __) _ ) _ (_ __) _ _(_) +48 22 489 9531
iaxtel 1-700-849-6983 / / / // / // / / / / /_/ / /
sip/iax:callto 101@::1/_/ ( ___( ___/ /_/ (_/ (_/_/.net FWD# 422493
Plus d'informations sur la liste de diffusion linux