Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[script] une variable à l'intérieur d'une variable (résolu)
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Wed Sep 06, 2006 11:52 pm    Post subject: [script] une variable à l'intérieur d'une variable (résol Reply with quote

Bonsoir, j'ai un souci avec mon script. En fait, j'ai séparé les données du script, ce qui fait que j'ai un fichier en plus "conf-list" ou dedans, je mets ce genre de ligne:

Code:

/etc/conf.d/
$HOME_PATH/.xbindkeys


Pour lire ce fichier j'utilise un FOR chemin_fichier IN fichier.

Tout va bien lors de la lecteure, le truc, c'est que à la place de lire ceci (avec un echo $chemin_fichier):

Code:

/etc/conf.d/
$HOME_PATH/.xbindkeys


j'aimerai bien lire ceci:
Code:

/etc/conf.d/
/home/loopx/.xbindkeys


car en fait, dans le script, la variable HOME_PATH correspond à mon home. Maintenant, comment puis-je arriver à resortir cette ligne ? Il faudrait que le $PATH_HOME soit reconverti mais vu qu'il n'est pas écrit dans le script mais dans le fichier à coté, ben ca foire :(


Ou, autre solution, il faudrait que je puisse refaire un fichier temporaire (presque identique à conf-list) mais avec le /home/loopx et non le $HOME_PATH mais j'ai aucune idée de la commande à utiliser pour faire ca.

Une idée ?
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org


Last edited by loopx on Thu Sep 07, 2006 11:15 pm; edited 1 time in total
Back to top
View user's profile Send private message
man in the hill
Veteran
Veteran


Joined: 15 Dec 2005
Posts: 1552
Location: Madinina

PostPosted: Thu Sep 07, 2006 1:39 am    Post subject: Reply with quote

Salut,


Essais cette opérateur ${} :
Code:
/etc/conf.d/
${HOME_PATH}/.xbindkeys


@ +
_________________
Get Up and Go !
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Thu Sep 07, 2006 3:26 am    Post subject: Reply with quote

ca n'a pas l'air de fonctionner :

Voilà ce que me renvoye un echo de la variable FILE (qui contient par exemple la ligne "${PATH_HOME}/.xbindkeysrc" provenant du fichier "conf-list"):

Les lignes sans les *** sont les echo pour chaque fichier...

Code:

*** /etc/X11/xorg.conf  ...FOUND
/etc/modules.autoload.d/kernel-2.6
*** /etc/modules.autoload.d/kernel-2.6  ...FOUND
/etc/vsftpd/vsftpd.conf
*** /etc/vsftpd/vsftpd.conf  ...FOUND
/etc/make.conf
*** /etc/make.conf  ...FOUND
${PATH_HOME}/.xbindkeysrc
${PATH_HOME}/.xinitrc
/etc/fstab
*** /etc/fstab  ...FOUND
/etc/group
*** /etc/group  ...FOUND
/etc/exports
*** /etc/exports  ...FOUND
/etc/hosts
*** /etc/hosts  ...FOUND
/etc/laptop-mode/laptop-mode.conf
*** /etc/laptop-mode/laptop-mode.conf  ...FOUND


Le path home n'a toujours pas été modifié :?

EDIT: c'est en rapport avec ce script : https://forums.gentoo.org/viewtopic-t-495040.html
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
man in the hill
Veteran
Veteran


Joined: 15 Dec 2005
Posts: 1552
Location: Madinina

PostPosted: Thu Sep 07, 2006 4:12 am    Post subject: Reply with quote

Je vais regarder cela de plus près demain mais je suis assez nul en bash et je ne te serais pas d'un grand secours mais je vais essayer de porter ce model sous ruby un de ces jours ...C'est quand même important de sauvegarder ces précieux fichiers ...

KarnEvil, Pierreg, NetFab et peut-être d'autres pourront facilement te venir en aide !


@ +
_________________
Get Up and Go !
Back to top
View user's profile Send private message
Temet
Advocate
Advocate


Joined: 14 Mar 2006
Posts: 2586
Location: 92

PostPosted: Thu Sep 07, 2006 5:44 am    Post subject: Reply with quote

Code:
$HOME/.xbindkeys


Chez moi ça marche.
Back to top
View user's profile Send private message
TTK
Guru
Guru


Joined: 02 Mar 2004
Posts: 523

PostPosted: Thu Sep 07, 2006 5:50 am    Post subject: Reply with quote

Salut

Une idée en passant, mais j'ai pas bien compris ton pb:
Code:

# toto=HOME
# echo ${!toto}
/home/ttk


HTH
Back to top
View user's profile Send private message
netfab
Veteran
Veteran


Joined: 03 Mar 2005
Posts: 1729
Location: 127.0.0.1

PostPosted: Thu Sep 07, 2006 6:54 am    Post subject: Reply with quote

Salut,

une solution :
Code:

$ cat fichier.conf
$HOME/.xbindkeys

$ cat fichier.sh
#!/bin/bash

cat < fichier.conf | while true
do
   read ligne
   if [ "$ligne" = "" ]; then break; fi

   echo $ligne

   cmd="echo $ligne"
   eval $cmd
done


Quote:

$ sh fichier.sh
$HOME/.xbindkeys
/home/netfab/.xbindkeys
Back to top
View user's profile Send private message
TTK
Guru
Guru


Joined: 02 Mar 2004
Posts: 523

PostPosted: Thu Sep 07, 2006 8:02 am    Post subject: Reply with quote

En me basant sur la proposition de NetFab, je te soumets ceci:
Code:

# cat fichier.conf
$HOME/.truc
/etc/pouet

# for i in `cat fichier.conf`; do j=echo" $i"; eval $j; done


Je n'ai pas ma machine sous les doigts mais je suppose que ça doit marcher. Par contre, il porurait être interessant de remplacer le echo par un ls par exemple, afin de vérifier du même coup l'existence du fichier ...
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Thu Sep 07, 2006 7:34 pm    Post subject: Reply with quote

Temet wrote:
Code:
$HOME/.xbindkeys


Chez moi ça marche.



Non non non, ce n'est pas la $HOME de gentoo qui donne le repertoire de l'utilisateur courant, ca peux pas aller ca vu que le script doit etre lancé en super utilisateur... Donc, HOME_PATH est une variable de MON script (= /home/loopx par exemple)
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Thu Sep 07, 2006 7:36 pm    Post subject: Reply with quote

man in the hill wrote:
Je vais regarder cela de plus près demain mais je suis assez nul en bash et je ne te serais pas d'un grand secours mais je vais essayer de porter ce model sous ruby un de ces jours ...C'est quand même important de sauvegarder ces précieux fichiers ...

KarnEvil, Pierreg, NetFab et peut-être d'autres pourront facilement te venir en aide !


@ +


C'est claire, surtout quand on config des serveurs et des desktops, le truc c'est que si un script générique peux le faire, c'est génial, la était mon but (qui est atteind mais bon, j'aime pas le switch de base :D)...

EDIT: j'ai pas encore mangé, je vais continuer tantot :) déjà grand merci à tous ;)
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Thu Sep 07, 2006 7:43 pm    Post subject: Reply with quote

TTK wrote:
Code:

# cat fichier.conf
$HOME/.truc
/etc/pouet

# for i in `cat fichier.conf`; do j=echo" $i"; eval $j; done


Mmmm, pas mal:

Code:

loopx@loop ~/test $ for i in `cat fichier.conf`; do j=echo" $i"; eval $j; done
/home/loopx/.truc
/etc/pouet


mais encore une fois, c'est pas la variable HOME de gentoo que j'utilisais, ctais celle du script :?
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
Enlight
Advocate
Advocate


Joined: 28 Oct 2004
Posts: 3519
Location: Alsace (France)

PostPosted: Thu Sep 07, 2006 7:51 pm    Post subject: Reply with quote

C'est moi où tout connement un coup t'as mis PATH_HOME et un coup HOME_PATH? Sinon j'ai toujours pas trop compris le problème et il se passe quoi avec l'encodage ici d'ailleurs? je joue aux devinettes là :lol:

edit c'est ce con de ouin ouin qu'était en utf-8 enfin bref en bash on a "source $mon_fichier" qui peut s'écrire ". $mon_fichier".
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Thu Sep 07, 2006 8:58 pm    Post subject: Reply with quote

Heu, en fait, il se pourrait que je me trompe avec HOME_PATH et PATH_HOME :oops:

Je réexplique le problème.

Donc, j'ai un script + 1 fichier. Dans le fichier, on y trouve ceci:

Code:

loop-nb script # cat conf-list
/etc/X11/xorg.conf
/etc/modules.autoload.d/kernel-2.6
/etc/vsftpd/vsftpd.conf
/etc/make.conf
${PATH_HOME}/.xbindkeysrc
${PATH_HOME}/.xinitrc


qui sont en fait, tous les fichiers/répertoires devant etre sauvegardé. J'ai laissé le ${PATH_HOME} (avant, c'étais $PATH_HOME mais vu que j'utilise plus de switch case, ca ne fonctionne plus).

Le fichier 'conf-list' est lu et affiché par cette portion du script :

Code:

        echo "Enter the path of your home folder (without the '/' of end): "
        read PATH_HOME
        echo

        if [ -e $PATH_HOME ]; then
                echo "> Home folder found ..."
        else
                echo "!!! Home folder not found !"
                exit 1
        fi

        echo "Conf="$CONF_LIST

        for FILE in $(cat $CONF_LIST);
        do
                echo $FILE

                if [ -e $FILE ]; then
                        echo -n "***" $FILE

                        if [ $STATE == check ]; then
                                echo "  ...FOUND"
                        elif [ $STATE == save ]; then
                                echo "  ...FOUND ...Saving..."
                                cp -r $FILE $PATH_CONF/conf
                        else
                                echo "> Warning: nothing to do for state: " $STATE
                        fi
                fi
        done


CONF_LIST=fichier avec la liste des configs
FILE contient 1 ligne du fichier liste par passage

Voilà ce que ca donne quand je lance le script :
Code:

Enter the path of your home folder (without the '/' of end):
/home/loopx

> Home folder found ...
Conf=conf-list
/etc/X11/xorg.conf
*** /etc/X11/xorg.conf  ...FOUND
/etc/modules.autoload.d/kernel-2.6
*** /etc/modules.autoload.d/kernel-2.6  ...FOUND
/etc/vsftpd/vsftpd.conf
*** /etc/vsftpd/vsftpd.conf  ...FOUND
/etc/make.conf
*** /etc/make.conf  ...FOUND
${PATH_HOME}/.xbindkeysrc
${PATH_HOME}/.xinitrc
/etc/fstab
*** /etc/fstab  ...FOUND
/etc/group
*** /etc/group  ...FOUND
/etc/exports
*** /etc/exports  ...FOUND


Il faudrait que, à la place du ${PATH_HOME}, il m'affiche la valeur de cette variable qui est initialisé juste avant la boucle for.
C'est donc une variable dans une variable :lol:
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
Temet
Advocate
Advocate


Joined: 14 Mar 2006
Posts: 2586
Location: 92

PostPosted: Thu Sep 07, 2006 9:03 pm    Post subject: Reply with quote

Y a un truc que je capte pas:

Code:
temet@gentoo ~ $ echo $PATH_HOME

temet@gentoo ~ $ echo $HOME_PATH



Elle n'existe pas chez moi ta variable! :?:
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Thu Sep 07, 2006 9:09 pm    Post subject: Reply with quote

Ben elle est dans le script la variable :wink: pas dans l'environement Gentoo :?
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
man in the hill
Veteran
Veteran


Joined: 15 Dec 2005
Posts: 1552
Location: Madinina

PostPosted: Thu Sep 07, 2006 9:09 pm    Post subject: Reply with quote

loopx wrote:

Le fichier 'conf-list' est lu et affiché par cette portion du script :

Code:

        echo "Enter the path of your home folder (without the '/' of end): "
        read PATH_HOME
        echo


Il faudrait que, à la place du ${PATH_HOME}, il m'affiche la valeur de cette variable qui est initialisé juste avant la boucle for.
C'est donc une variable dans une variable :lol:


Temet wrote:

Y a un truc que je capte pas:

Code:
temet@gentoo ~ $ echo $PATH_HOME

temet@gentoo ~ $ echo $HOME_PATH



Elle n'existe pas chez moi ta variable! :?:


C'est normal c'est une variable qu'il initialise avec read dans son script !


@ +
_________________
Get Up and Go !
Back to top
View user's profile Send private message
Enlight
Advocate
Advocate


Joined: 28 Oct 2004
Posts: 3519
Location: Alsace (France)

PostPosted: Thu Sep 07, 2006 9:13 pm    Post subject: Reply with quote

ok j'ai rien sous la main pour tester, mais si tu essayes de remplacer le for ... par

Code:

while read FILE; do
        echo "$FILE"
...
done < $CONF_LIST


ça permettra de savoir si cat est en cause.
Back to top
View user's profile Send private message
man in the hill
Veteran
Veteran


Joined: 15 Dec 2005
Posts: 1552
Location: Madinina

PostPosted: Thu Sep 07, 2006 9:18 pm    Post subject: Reply with quote

Pourquoi tu scindes en deux fichiers ?
_________________
Get Up and Go !
Back to top
View user's profile Send private message
Enlight
Advocate
Advocate


Joined: 28 Oct 2004
Posts: 3519
Location: Alsace (France)

PostPosted: Thu Sep 07, 2006 9:25 pm    Post subject: Reply with quote

man in the hill wrote:
Pourquoi tu scindes en deux fichiers ?


Pour qu'on puisse editer le premier sans se faire peur avec le code.

Q'ailleurs 2 autres trucs à tenter :

1) remplacer ton cat par "source" dans le for

2) remplacer $PATH_HOME dans le fichier par "path_home" puis dans le script, faire un `cat $fichier | sed @path_home@$PATH_HOME@` (méthode du contournement statégique crado)
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Thu Sep 07, 2006 9:26 pm    Post subject: Reply with quote

man in the hill wrote:
Pourquoi tu scindes en deux fichiers ?


Pour l'efficacité biensur :)



Tiens, j'étais entrain de chercher comment regénérer mes clé pour openvpn, et voilà que je tompe sur ca (fichier vars) :

Code:

export KEY_SIZE=1024

# In how many days should the root CA key expire?
export CA_EXPIRE=365

# In how many days should certificates expire?
export KEY_EXPIRE=365


et jme dis, tiens, peut etre qu'un export de ma variable pourrais le faire (si ca fonctionne avec $HOME) ... Mais je vais toujours regardé du coté de la boucle, c'est plus propre.
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Thu Sep 07, 2006 9:32 pm    Post subject: Reply with quote

Pour le source, c'est raté, voilà ce que ca fait:

Code:

conf-list: line 1: /etc/X11/xorg.conf: Permission denied
conf-list: line 2: /etc/modules.autoload.d/kernel-2.6: Permission denied
conf-list: line 3: /etc/vsftpd/vsftpd.conf: Permission denied
conf-list: line 4: /etc/make.conf: Permission denied
conf-list: line 5: /home/loopx/.xbindkeysrc: Permission denied
conf-list: line 6: /home/loopx/.xinitrc: No such file or directory


mais tiens, il est marqué /home/loopx maintenant 8)


Visiblement, le cat est en cause, le source pourrais fonctionner mais le script fonctionne plus des mass :?

EDIT: pour la boucle while, ca fonctionne pas non plus, meme problème qu'avant:
Code:

/etc/X11/xorg.conf
*** /etc/X11/xorg.conf  ...FOUND
/etc/modules.autoload.d/kernel-2.6
*** /etc/modules.autoload.d/kernel-2.6  ...FOUND
/etc/vsftpd/vsftpd.conf
*** /etc/vsftpd/vsftpd.conf  ...FOUND
/etc/make.conf
*** /etc/make.conf  ...FOUND
${PATH_HOME}/.xbindkeysrc
${PATH_HOME}/.xinitrc
/etc/fstab


EDIT2: l'export ne résoud pas le problème non plus

Code:

loop-nb script # echo $PATH_HOME
/home/loopx



/etc/X11/xorg.conf
*** /etc/X11/xorg.conf  ...FOUND
/etc/modules.autoload.d/kernel-2.6
*** /etc/modules.autoload.d/kernel-2.6  ...FOUND
/etc/vsftpd/vsftpd.conf
*** /etc/vsftpd/vsftpd.conf  ...FOUND
/etc/make.conf
*** /etc/make.conf  ...FOUND
${PATH_HOME}/.xbindkeysrc
$PATH_HOME/.xinitrc


J'ai meme testé avec $PATH_HOME mais rien n'a faire :(
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
Enlight
Advocate
Advocate


Joined: 28 Oct 2004
Posts: 3519
Location: Alsace (France)

PostPosted: Thu Sep 07, 2006 10:17 pm    Post subject: Reply with quote

essaye sans variable mais avec substitution sed comme j'ai dit plus haut.
Back to top
View user's profile Send private message
guitoo
Tux's lil' helper
Tux's lil' helper


Joined: 04 Jun 2004
Posts: 136

PostPosted: Thu Sep 07, 2006 10:39 pm    Post subject: Reply with quote

Je pense que je voix le problème.
Comme tu lit le chemin du fichier $HOME/trucmuche dans un fichier il n'ya pas d'évaluation comme si tu faisait FILE=$HOME/trucmuche
En fait ta variable FILE va contenir $HOME/trucmuche. Comme si tu avait fait FILE='$HOME/trucmuche' . Ce que tu doit faire c'est evaluer la chaine au moment ou tu lit le fichier avec la commande eval.

Exemple
$ FILE='$HOME/trucmuche'
$ eval echo $FILE
/home/bidule/trucmuche

Dans le cas ou tu lis un fichier:

for i in $(cat $LIST_FILE); do
FILE=eval echo $i
.
.
.
done

on peut aussi faire
eval FILE=$i

ou encore

for FILE in eval echo $(cat $LIST_FILE); do
.
.
.
done
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Thu Sep 07, 2006 11:14 pm    Post subject: Reply with quote

@guitoo

Merci, bien essayé mais c'est pas encore ca. Tu parles peut eter de la variable $HOME qui n'est pas ce que j'utilise.

J'ai essayé la commande eval ainsi dans mon script (en espérant qu'il me rechange le $PATH_HOME en /home/loopx mais rien a faire :( )

Code:

et mais j'ai encore mal regardé !!!



Super, ca fonctionne :)

Merci beaucoup, je vais y regarder de plus pret et terminer ce script ;) (je mettrai à jour le script dans les docs).

Code:

for FILE in $(cat $CONF_LIST);
        do
                echo $FILE
                FILE=$(eval echo $FILE)
                echo $FILE

                if [ -e $FILE ]; then
                        echo -n "***" $FILE

                        if [ $STATE == check ]; then
                                echo "  ...FOUND"
                        elif [ $STATE == save ]; then
                                echo "  ...FOUND ...Saving..."
                                 cp -r $FILE $PATH_CONF/conf
                        else
                                echo "> Warning: nothing to do for state: " $STATE
                        fi
                fi
        done


Code:

/etc/X11/xorg.conf
/etc/X11/xorg.conf
*** /etc/X11/xorg.conf  ...FOUND
/etc/modules.autoload.d/kernel-2.6
/etc/modules.autoload.d/kernel-2.6
*** /etc/modules.autoload.d/kernel-2.6  ...FOUND
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd.conf
*** /etc/vsftpd/vsftpd.conf  ...FOUND
/etc/make.conf
/etc/make.conf
*** /etc/make.conf  ...FOUND
${PATH_HOME}/.xbindkeysrc
/home/loopx/.xbindkeysrc
*** /home/loopx/.xbindkeysrc  ...FOUND
$PATH_HOME/.xinitrc
/home/loopx/.xinitrc
/etc/fstab
/etc/fstab
*** /etc/fstab  ...FOUND



Super, merci pour tout :)
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Fri Sep 08, 2006 12:29 am    Post subject: Reply with quote

voilà, j'ai mis à jour mon script : https://forums.gentoo.org/viewtopic-p-3562682.html#3562682

Disponible pour les les pourris comme moi qui ont peur de perdre leurs configs, et qui surtout veulent pas refaire ce qui à déjà été fait :wink:
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum