Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1554 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Execution d'un script shell a partir d'un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Execution d'un script shell a partir d'un fichier

n°600825
Giz
Posté le 06-12-2004 à 16:39:45  profilanswer
 

Je tourne sous suse9.1 avec le shell 'bash'.
Il y a kkchose qui me turlupine :
 
Dans un fichier 'script.sh' je mets :


export JAVA_HOME="un_chemin_qcq"


 
lorsque dans le shell bash je tape la commande pour executer ce script :


> ./script.sh


 
...et que je fais  


> echo $JAVA_HOME


 
la variable n'a aucune valeur, elle vaut "chaine vide" ! Par contre si je fais la commande


> source ./script.sh


 
...JAVA_HOME est tres bien defini !
 
au fait :
1) mon fichier est bien executable
2) je suis dans le bon chemin pour executer la commande
 
Question :
1) comment marche le bash ? (j'ai essaié avec ksh, sh, xterm,...c le meme probleme !
2) que fait de plus la commande 'source' ?
 
Merci  :jap:

mood
Publicité
Posté le 06-12-2004 à 16:39:45  profilanswer
 

n°600851
e_esprit
Posté le 06-12-2004 à 17:21:10  profilanswer
 

Quand tu fait ./script.sh, en fait un nouveau process bash est lancé, la variable JAVA_HOME est défini dans l'environnement d'execution de celui-ci.  
Quand tu termines ton scripts et reviens dans ton bash initial, l'environnement d'execution du bash dedié a ton script n'existe plus, ainsi que ta variable ;)
 
La commande source fait (cf. man bash) :

Citation :

Lire  et  exécuter  les  commandes contenues dans le fichier  
avec l'environnement du shell en  cours,  puis  renvoyer  le
code  de  retour  de  la  dernière commande exécutée dans le
fichier.


 
Voila ;)

n°600852
matafan
Posté le 06-12-2004 à 17:22:06  profilanswer
 

1) Un processus ne peut pas modifier l'environnement de son parent. Il ne peut modifier que son propre environnement. Il peut aussi choisir quel environnement transmettre lors d'un exec. Quand tu executes ton script avec ./script.sh, ton shell fork et lance un nouveau shell qui va executer ton script. JAVA est modifie dans l'environnement du processus fils, pas dans le processus pere (ton shell).
 
2) "source" demande au shell courant d'interpreter le script qui est passe en argument. Ca ne cree pas de sous-shell. Donc dans ce cas ton script modifie bien l'environnement de ton shell courant.
 
Note que "." est equivalent a "source". Au lieu de faire "source ./script.sh", tu peux faire ". ./script.sh".

n°600891
Giz
Posté le 06-12-2004 à 17:59:37  profilanswer
 

Putain, parfait les mecs !  :jap: voilà qui est clair  :love:
 
EDIT : je voudrais que ce script s'execute a chaque demarrage de session et pour tout les environnements donc ! ou dois-je faire ca ?


Message édité par Giz le 06-12-2004 à 18:01:06
n°600894
e_esprit
Posté le 06-12-2004 à 18:03:21  profilanswer
 

dans /etc/profile ;)

n°600896
Giz
Posté le 06-12-2004 à 18:03:52  profilanswer
 

matafan a écrit :

1) Un processus ne peut pas modifier l'environnement de son parent. Il ne peut modifier que son propre environnement. Il peut aussi choisir quel environnement transmettre lors d'un exec. Quand tu executes ton script avec ./script.sh, ton shell fork et lance un nouveau shell qui va executer ton script. JAVA est modifie dans l'environnement du processus fils, pas dans le processus pere (ton shell).
 
2) "source" demande au shell courant d'interpreter le script qui est passe en argument. Ca ne cree pas de sous-shell. Donc dans ce cas ton script modifie bien l'environnement de ton shell courant.
 
Note que "." est equivalent a "source". Au lieu de faire "source ./script.sh", tu peux faire ". ./script.sh".


 
les '../' ne ramène pas au repertoire parent  :heink:

n°600897
e_esprit
Posté le 06-12-2004 à 18:04:26  profilanswer
 

. 'espace' ./script.sh :D

n°600900
Giz
Posté le 06-12-2004 à 18:06:03  profilanswer
 

e_esprit a écrit :

dans /etc/profile ;)


 
Et dans mon home (je veux ceci juste pour mon compte) il n'y a pas un "meme" fichier ? (j'ai essaié de mettre `path_du_script` dans le ~/.bashrc mais ca initialise toujours pas mes variables)

n°600901
e_esprit
Posté le 06-12-2004 à 18:08:15  profilanswer
 

.profile ou .bashrc (EDIT: ou encore .bash_profile, le fichier utilisé depends du statut du shell (shell de login ou non, interactif ou non...), je te laisse chercher celui qui t'interesse :d)
 
et dans ce fichier la, pas besoin du 'source'
les 'export TES_VARIABLE=TrucHocse' doivent fonctionner sans problèmes ;)
 
Mais ca peut etre une bonne idée de faire un source afin de séparer tes fichiers :)


Message édité par e_esprit le 06-12-2004 à 18:11:11
n°600904
Giz
Posté le 06-12-2004 à 18:11:12  profilanswer
 

e_esprit a écrit :

.profile ou .bashrc
 
et dans ce fichier la, pas besoin du 'source'
les 'export TES_VARIABLE=TrucHocse' doivent fonctionner sans problèmes ;)
 
Mais ca peut etre une bonne idée de faire un source afin de séparer tes fichiers :)


 
OK v revoir ca. Merci pour "l'aide personnelle instantanée" :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Execution d'un script shell a partir d'un fichier

 

Sujets relatifs
fichier cueLancer un script shell à partir d'une page php ?
[shell] Comment tester une chaine sans tenir compte des maj/minconnaitre les infos sur la carte mere en shell
[Debian] XFree trouve pas le fichier de configExecution et Crontab
Debian - fausse manip sur système de fichier ![Debian] Savoir quel paquet installe un fichier
Plus de sujets relatifs à : Execution d'un script shell a partir d'un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR