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

Répondre à