Execution d'un script shell a partir d'un fichier - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 06-12-2004 à 17:21:10
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 |
Voila
Marsh Posté le 06-12-2004 à 17:22:06
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".
Marsh Posté le 06-12-2004 à 17:59:37
Putain, parfait les mecs ! voilà qui est clair
EDIT : je voudrais que ce script s'execute a chaque demarrage de session et pour tout les environnements donc ! ou dois-je faire ca ?
Marsh Posté le 06-12-2004 à 18:03:52
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). |
les '../' ne ramène pas au repertoire parent
Marsh Posté le 06-12-2004 à 18:06:03
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)
Marsh Posté le 06-12-2004 à 18:08:15
.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 )
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
Marsh Posté le 06-12-2004 à 18:11:12
e_esprit a écrit : .profile ou .bashrc |
OK v revoir ca. Merci pour "l'aide personnelle instantanée"
Marsh Posté le 06-12-2004 à 16:39:45
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