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 [EMAIL PROTECTED]/_/ ( ___( ___/ /_/ (_/ (_/_/.net FWD#
422493