Déclaration de var. d'env depuis un script.

Déclaration de var. d'env depuis un script. - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 27-04-2007 à 17:28:52    

:hello:  
 
Bonjour,
 
j'ai fait un script qui declare des var d'env...

Citation :


[umcprd@tqmutu01b ~]$ cat /tmp/scripts/setEnv.sh
export ANT_HOME=/opt/apache-ant-1.6.5
export JAVA_HOME=/opt/jdk15
export JBOSS_HOME=/appli/umcprd/jboss-4.0.4.GA
export EJBCA_HOME=/appli/umcprd/ejbca_3_4_1
export PATH=.:/usr/lunasa/bin:$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$CLASSPATH
export LD_LIBRARY_PATH=/usr/lunasa/jsp/lib:$LD_LIBRARY_PATH


 
si j'execute mon script, les variables existent bien pdt mon script, mais une fois mon script terminé...je n'ai plus accès aux variables :(
 
comment puis je faire ?
 
merci pour votre aide :)

Reply

Marsh Posté le 27-04-2007 à 17:28:52   

Reply

Marsh Posté le 27-04-2007 à 22:50:11    

Alors, ca ne marche effectivement pas comme ca.
Quand tu quittes le script, les variables définies à l'intérieur ne le sont plus après l'exécution.

 

Je te conseille de mettre ses positionnement de variables dans ton .bashrc (si tu utilises bash ce qui est sans doute le cas)


Message édité par TofK le 27-04-2007 à 22:50:51
Reply

Marsh Posté le 28-04-2007 à 00:11:13    

Bonsoir,
Quand tu exécute un script depuis ton shell (sh, bash, ksh, csh, ..), celui-ci crée (il "fork" ) un prcessus fils qui va se charger de lire et exécuter les lignes de ton script. Si tu mets comme interpréteur :  

#!/bin/sh


au début de ton script et que tu es sous bash par exemple, bash va créer un processus (avec le binare /bin/sh) qui va vivre sa vie pendant l'exécution du script et à la fin, rendre la main au bash.
Tu vois, ce n'est même pas le même binaire qui prend en charge ton script. C'est donc normal que le pauvre bash ne sache pas ce que son défunt fils (/bin/sh) a traficoté pendant sa vie. Le fait que tu mette le même interpréteur pour ton script que ton shell n'y chagera rien. Ton shell lancerait une copie de lui-même, qui à sa mort emportera son env avec elle à la tombe.
 
Pour que ton shell en cours prenne à sa charge (qu'il "source" ) les instructions de ton script; il faut juste le lui dire :  

. /tmp/scripts/setEnv.sh


Ainsi tu lui demande de ne même pas vérivier si tu spécifie un interpréteur. Il ne créra pas de processus fils : il exécutera lui-même les instructions.
C'est en fait comme s'il y avait un tomtom41 virtuel qui tapait le instructions du script une à une dans ta fenêtre shell  :ouch:  
 
Attention : s'il y a du "code actif", il sera exécuté aussi, et ça on l'oublie souvent : les rm et mv .. seront exécutés.. et les exit aussi ! Dans un script à sourcer, il faut mettre uniquement des déclarations (de variables et de fonctions..). Pas conseillé de mettre du traitement..  :non:  
 
 

Reply

Marsh Posté le 28-04-2007 à 08:17:52    

p-seeker23 a écrit :

Bonsoir,
Quand tu exécute un script depuis ton shell (sh, bash, ksh, csh, ..), celui-ci crée (il "fork" ) un prcessus fils qui va se charger de lire et exécuter les lignes de ton script. Si tu mets comme interpréteur :  

#!/bin/sh


au début de ton script et que tu es sous bash par exemple, bash va créer un processus (avec le binare /bin/sh) qui va vivre sa vie pendant l'exécution du script et à la fin, rendre la main au bash.
Tu vois, ce n'est même pas le même binaire qui prend en charge ton script. C'est donc normal que le pauvre bash ne sache pas ce que son défunt fils (/bin/sh) a traficoté pendant sa vie. Le fait que tu mette le même interpréteur pour ton script que ton shell n'y chagera rien. Ton shell lancerait une copie de lui-même, qui à sa mort emportera son env avec elle à la tombe.
 
Pour que ton shell en cours prenne à sa charge (qu'il "source" ) les instructions de ton script; il faut juste le lui dire :  

. /tmp/scripts/setEnv.sh


Ainsi tu lui demande de ne même pas vérivier si tu spécifie un interpréteur. Il ne créra pas de processus fils : il exécutera lui-même les instructions.
C'est en fait comme s'il y avait un tomtom41 virtuel qui tapait le instructions du script une à une dans ta fenêtre shell  :ouch:  
 
Attention : s'il y a du "code actif", il sera exécuté aussi, et ça on l'oublie souvent : les rm et mv .. seront exécutés.. et les exit aussi ! Dans un script à sourcer, il faut mettre uniquement des déclarations (de variables et de fonctions..). Pas conseillé de mettre du traitement..  :non:


Bon à savoir.
 [:athome]

Reply

Marsh Posté le 04-05-2007 à 13:51:10    

"." est un alias pour "source", ou inversement.

Reply

Marsh Posté le 05-05-2007 à 00:09:31    

source c'est de la foutaise de bash
 
. est très bien

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed