Rendre $ JAVA_HOME facilement modifiable dans Ubuntu [fermé]

139

Dans Ubuntu, j'aimerais basculer ma variable d'environnement JAVA_HOME entre Java 5 et 6.

J'ouvre un terminal et saisis ce qui suit pour définir la variable d'environnement JAVA_HOME:

export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun

Et dans cette même fenêtre de terminal, je tape ce qui suit pour vérifier que la variable d'environnement a été mise à jour:

echo $JAVA_HOME

Et je vois /usr/lib/jvm/java-1.5.0-sun qui est ce que je m'attends à voir. De plus, je modifie ~ / .profile et définit la variable d'environnement JAVA_HOME sur /usr/lib/jvm/java-1.5.0-sun.

Et maintenant, pour le problème - lorsque j'ouvre une nouvelle fenêtre de terminal et que je vérifie ma variable d'environnement JAVA_HOME en tapant echo $ JAVA_HOME, je vois que ma variable d'environnement JAVA_HOME est revenue à Java 6. Lorsque je redémarre ma machine (ou aller et retour, je suppose) la variable d'environnement JAVA_HOME est définie sur Java 5 (probablement à cause de la modification que j'ai faite dans mon ~ / .profile).

Existe-t-il un moyen de contourner ce problème pour que je puisse changer mon environnement JAVA_HOME sans avoir à me déconnecter et à me reconnecter (ET faire en sorte que le changement de variable d'environnement reste dans toutes les nouvelles fenêtres de terminal)?

Parc Junho
la source
29
Quel est le site correct et la réponse en double?
Martin Konicek
Le ~/.profilefichier n'est lu que lorsque vous vous connectez à Ubuntu, donc si vous vous déconnectez / vous connectez, JAVA_HOME est défini pour tous les terminaux et toutes les autres applications que vous exécutez. Si vous définissez JAVA_HOME, ~/.bashrcil ne sera vu que par les applications exécutées à partir du terminal.
jr0cket

Réponses:

196

Mettez les variables d'environnement dans le /etc/environmentfichier global :

...
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
...

Exécutez "source / etc / environment" dans chaque shell où vous souhaitez que les variables soient mises à jour:

$ source /etc/environment

Vérifiez que cela fonctionne:

$ echo $JAVA_HOME
$ /usr/lib/jvm/java-1.5.0-sun

Génial, aucune déconnexion nécessaire.

Si vous souhaitez définir la variable d'environnement JAVA_HOME uniquement dans le terminal, définissez-la dans le fichier ~ / .bashrc .

Martin Konicek
la source
9
Un redémarrage est toujours nécessaire pour que ces modifications affectent les applications lancées via l'interface utilisateur Ubuntu (c'est-à-dire en double-cliquant sur une application)
Eric Hu
7
En quoi est-ce différent de simplement définir la variable dans chaque shell friggin?
mlissner
1
une autre façon de ne pas avoir à l'exécuter manuellement à chaque fois est de modifier votre fichier .bashrc pour inclure la commande "source / etc / environment"
nityan
1
@MartinKonicek votre exemple est incorrect. il ne devrait y avoir aucune «exportation» sur cette ligne. / etc / environment contient des paires valeur / clé
pdeva
1
gardez à l'esprit que /etc/environmentc'est spécial et ne permet pas la substitution de variables, par exemple JRE_HOME=${JAVA_HOME}/jrene fonctionnera pas.
Abdull
31

Cela résoudra probablement votre problème: https://help.ubuntu.com/community/EnvironmentVariables

Variables d'environnement à l'échelle de la session

Afin de définir des variables d'environnement d'une manière qui affecte l'environnement d'un utilisateur particulier, il ne faut pas placer de commandes pour définir leurs valeurs dans des fichiers de script shell particuliers dans le répertoire de base de l'utilisateur, mais utiliser:

~ / .pam_environment - Ce fichier est spécifiquement destiné à la configuration de l'environnement d'un utilisateur. Ce n'est pas un fichier de script, mais consiste plutôt en des expressions d'affectation, une par ligne.

Non recommandé:

~ / .profile - C'est probablement le meilleur fichier pour placer les affectations de variables d'environnement, car il est exécuté automatiquement par le DisplayManager pendant la session de bureau du processus de démarrage ainsi que par le shell de connexion lorsque l'on se connecte à partir de la console textuelle.

Holger Frohloff
la source
À partir du lien que vous avez fourni: "Les éléments ci-dessous ne sont pas recommandés mais la solution précédente (?) Fournie sur cette page ne fonctionnait pas avec la version de bureau 10.04. .Pam_environment n'est pas traité naturellement avec la distribution."
Calmarius
14
~ / .pam_environment est un moyen génial de brique votre connexion si vous supposez qu'il traite des variables. J'ai essayé de définir PATH sur $ {PATH}: $ {HOME} / bin et il n'a pas réussi à évaluer les variables. Résultat net: impossible de se connecter :( Correction en visitant Ctrl-Alt-1 et en exécutant "/ bin / rm ~ / .pam_environment". Soyez extrêmement prudent ou utilisez un compte secondaire pour tester les paramètres ici.
Alain O'Dea
6
Personnellement, je ne sais pas pourquoi ils ont pris la peine de créer le fichier d'environnement et l'ont ensuite fait fonctionner d'une manière complètement différente de tout autre mécanisme de définition des variables d'environnement jamais fonctionné auparavant. Les paires clé-valeur simples comme le fichier d'environnement utilise sont des BS. Il y a une raison pour laquelle nous utilisons des variables et des liens dans l'environnement et cela a encore du mérite aujourd'hui. Cela simplifie l'administration. Quels que soient les bozos qui ont décidé que la manière PAM de faire les choses dans ce dossier était la meilleure, sont au mieux des imbéciles. Les variables DOIVENT être interprétées.
Bill Rosmus
1
@ AlainO'Dea: J'ai eu exactement le même problème. Choqué et inquiet de ne pas pouvoir dépasser l'écran de connexion. Après quelques recherches, j'ai trouvé que vous pouvez utiliser des variables mais que vous devez utiliser une syntaxe différente. par exemple. PATH DEFAULT = $ {PATH}: $ {HOME} / bin Lorsqu'il n'utilise pas de variable, une simple affectation semble fonctionner.
tim_wonil
Oui, je suis d'accord avec @ AlainO'Dea. S'il y a une erreur dans votre script, vous ne pourrez pas vous connecter. Prends soin de toi.
Evan Hu
13

Essayez ces étapes.

- Nous allons éditer "etc \ profile". Les variables d'environnement doivent être saisies au bas du fichier. Puisque Ubuntu ne donne pas accès au dossier racine, nous devrons utiliser quelques commandes dans le terminal

Étape 1: Démarrez le terminal. Tapez la commande:gksudo gedit /etc/profile

Étape 2: Le fichier texte du profil s'ouvre. Entrez les variables d'environnement en bas de page ........... Ex: export JAVA_HOME=/home/alex/jdk1.6.0_22/bin/java

export PATH=/home/alex/jdk1.6.0_22/bin:$PATH

étape 3: enregistrez et fermez le fichier. Vérifiez si les variables d'environnement sont définies à l'aide de la commande echo ........ Par exemple echo $PATH

Alex
la source
9

Vous devez mettre la définition de variable dans le ~/.bashrcfichier.

Depuis la page de manuel bash:

Lorsqu'un shell interactif qui n'est pas un shell de connexion est démarré, bash lit et exécute les commandes de /etc/bash.bashrc et ~ / .bashrc, si ces fichiers existent.

Paweł Nadolski
la source
5

Traditionnellement, si vous souhaitez uniquement modifier la variable dans les fenêtres de votre terminal, définissez-la dans un .bashrcfichier, qui est généré à chaque fois qu'un nouveau terminal est ouvert. .profilele fichier ne provient pas à chaque fois que vous ouvrez un nouveau terminal.

Voir la différence entre .profile et .bashrc en question: Quelle est la différence entre .bashrc, .bash_profile et .environment?

.bashrcdevrait résoudre votre problème. Cependant, ce n'est pas la bonne solution puisque vous utilisez Ubuntu. Consultez la page d'aide Ubuntu appropriée « Variables d'environnement à l'échelle de la session ». Ainsi, pas étonnant que .profilecela ne fonctionne pas pour vous. J'utilise Ubuntu 12.04 et xfce. J'ai configuré mon .profileet il ne prend tout simplement pas effet même si je me déconnecte et me connecte. Expérience similaire ici . Vous devrez peut-être utiliser .pam_environmentfile et oublier totalement .profile, et .bashrc. Et notez que ce .pam_environmentn'est pas un fichier de script.

HongboZhu
la source
1

Jetez un oeil à bash(1), vous avez besoin d'un shell de connexion pour choisir ~/.profilel' -loption , c'est-à-dire .

Nikolai Fetissov
la source
1

Après avoir apporté des modifications à .profile, vous devez exécuter le fichier pour que les modifications prennent effet.

root@masternode# . ~/.profile

Une fois que cela est fait, la commande echo fonctionnera.

CodeShane
la source
Vous devriez utiliser ~/.profileplutôt que ./.profile.
Alexis Wilke