2 votes

Un script peut-il modifier une variable d'environnement de son script appelant ?

Je fixe mon JAVA_HOME dans mon ~/.bashrc fichier.

Maintenant, j'ai besoin de créer un script qui changera la JAVA_HOME juste pour le terminal actuel, afin que je puisse lancer une application qui nécessite java 5.

J'ai créé ce script pour faire cette tâche, mais après avoir terminé, je peux voir que JAVA_HOME n'est pas mis à jour.

export JAVA_HOME=/usr/lib/jvm/java-5-oracle/
export PATH=$PATH:$JAVA_HOME    

Voici le résultat

$ ./javaHome5.sh
$ echo $JAVA_HOME
/usr/lib/jvm/java-6-oracle/

Je pense que la raison pour laquelle cela n'est pas appliqué, est qu'un script s'exécute dans son propre terminal, donc quand le script se termine, le terminal actuel ne sera pas affecté.

Actuellement, le seul moyen que j'ai trouvé pour contourner ce problème est :

  1. Modifier mon ~/.bashrc et changer le JAVA_HOME var
  2. Exécuter source ~/.bashrc pour appliquer les changements dans le terminal actuel. Ce qui, encore une fois, ne peut pas être appliqué dans un script, car l'option source doit être exécutée dans la fenêtre actuelle.

Inutile de dire que ce changement s'applique à tous les nouveaux terminaux Windows, ce qui fait que je dois pratiquement effectuer cette opération deux fois : une fois avant de lancer mon application, et une autre fois juste après, juste pour rétablir les variables d'environnement par défaut. Ce n'est pas vraiment pratique.

Avez-vous une idée de la façon dont je peux changer cette var en utilisant un script ?

7voto

Malte Skoruppa Points 12096

Ce n'est pas possible. Comme vous l'avez correctement observé, votre script s'exécute dans son propre script. Ce script obtient une copie de l'environnement de son script parent lorsqu'il est bifurqué, et il n'a aucun moyen d'accéder à l'environnement du script parent. Et c'est bien, parce que sinon script pourrait avoir toutes sortes d'effets secondaires imprévus ;)

Pour modifier des variables dans votre Shell actuel, vous pouvez toujours mettre en source votre fichier Shell (au lieu de l'exécuter en tant que processus indépendant), de sorte que le Shell soit exécuté par votre Shell actuel au lieu d'une fourche. Si votre Shell est appelé myscript.sh appelle cela comme source myscript.sh au lieu de ./myscript.sh .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X