Haga que $ JAVA_HOME se pueda cambiar fácilmente en Ubuntu [cerrado]

139

En Ubuntu, me gustaría cambiar mi variable de entorno JAVA_HOME de un lado a otro entre Java 5 y 6.

Abro un terminal y escribo lo siguiente para establecer la variable de entorno JAVA_HOME:

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

Y en esa misma ventana de terminal, escribo lo siguiente para verificar que la variable de entorno se haya actualizado:

echo $JAVA_HOME

Y veo /usr/lib/jvm/java-1.5.0-sun, que es lo que espero ver. Además, modifico ~ / .profile y configuro la variable de entorno JAVA_HOME en /usr/lib/jvm/java-1.5.0-sun.

Y ahora, para el problema: cuando abro una nueva ventana de terminal y verifico mi variable de entorno JAVA_HOME escribiendo echo $ JAVA_HOME , veo que mi variable de entorno JAVA_HOME se ha revertido a Java 6. Cuando reinicio mi máquina (o inicio sesión Supongo que la variable de entorno JAVA_HOME está configurada en Java 5 (presumiblemente debido a la modificación que hice en mi ~ / .profile).

¿Hay alguna forma de evitar esto para que pueda cambiar mi entorno JAVA_HOME sin tener que cerrar la sesión y volver a iniciarla (Y hacer que el cambio de la variable de entorno permanezca en todas las ventanas de terminal nuevas)?

Parque Junho
fuente
29
¿Cuál es el sitio correcto y la respuesta duplicada?
Martin Konicek
El ~/.profilearchivo solo se lee cuando inicia sesión en Ubuntu, por lo que si cierra sesión / inicia sesión, JAVA_HOME se configura para todos los terminales y cualquier otra aplicación que ejecute. Si configura JAVA_HOME ~/.bashrc, solo se verán las aplicaciones que se ejecutan desde el terminal.
jr0cket

Respuestas:

196

Coloque las variables de entorno en el /etc/environmentarchivo global :

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

Ejecute "source / etc / environment" en cada shell donde desee que se actualicen las variables:

$ source /etc/environment

Comprueba que funciona:

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

Genial, no se necesita cerrar sesión.

Si desea establecer la variable de entorno JAVA_HOME solo en la terminal, configúrela en el archivo ~ / .bashrc .

Martin Konicek
fuente
9
Todavía es necesario reiniciar para que estos cambios afecten a las aplicaciones lanzadas a través de la interfaz de usuario de Ubuntu (es decir, hacer doble clic en una aplicación)
Eric Hu
77
¿Cómo es esto diferente de simplemente establecer la variable en cada maldita shell?
mlissner
1
Otra forma de no tener que ejecutar esto manualmente cada vez es modificar su archivo .bashrc para incluir el comando "source / etc / environment"
nityan
1
@MartinKonicek su ejemplo es incorrecto. no debería haber "exportación" en esa línea. / etc / environment contiene pares de valores clave
pdeva
1
tenga en cuenta que /etc/environmentes especial y no permite la sustitución de variables, por ejemplo JRE_HOME=${JAVA_HOME}/jre, no funcionará.
Abdull
31

Esto probablemente resolverá su problema: https://help.ubuntu.com/community/EnvironmentVariables

Variables de entorno de toda la sesión

Para establecer variables de entorno de una manera que afecte el entorno de un usuario en particular, uno no debe colocar comandos para establecer sus valores en archivos de script de shell particulares en el directorio de inicio del usuario, sino usar:

~ / .pam_environment: este archivo está específicamente diseñado para configurar el entorno de un usuario. No es un archivo de script, sino que consiste en expresiones de asignación, una por línea.

No recomendado:

~ / .profile: este es probablemente el mejor archivo para colocar asignaciones de variables de entorno, ya que el DisplayManager lo ejecuta automáticamente durante la sesión de escritorio del proceso de inicio, así como el shell de inicio de sesión cuando se inicia sesión desde la consola de texto.

Holger Frohloff
fuente
Desde el enlace que proporcionó: "No se recomienda lo siguiente, pero la solución anterior (?) Proporcionada en esta página no funcionó con la versión de escritorio 10.04. .Pam_environment no se procesa naturalmente con la distribución".
Calmarius
14
~ / .pam_environment es una forma increíble de bloquear su inicio de sesión si supone que procesa variables. Intenté establecer PATH en $ {PATH}: $ {HOME} / bin y no pudo evaluar las variables. Resultado neto: no se puede iniciar sesión :( Se solucionó visitando Ctrl-Alt-1 y ejecutando "/ bin / rm ~ / .pam_environment". Tenga mucho cuidado o use una cuenta secundaria para probar la configuración aquí.
Alain O'Dea
66
Personalmente, no sé por qué se molestaron en crear el archivo de entorno y luego lo hicieron funcionar de una manera completamente diferente a cualquier otro mecanismo para establecer variables de entorno que haya funcionado antes. Los pares de valores de clave simples como el que utiliza el archivo de entorno son BS simples. Hay una razón por la que usamos variables y enlaces en el entorno y todavía tiene mérito hoy. Simplifica la administración. Quienquiera que sean los bozos que decidieron que la forma PAM de hacer las cosas en este archivo era la mejor, son los más imbéciles. Las variables DEBEN ser interpretadas.
Bill Rosmus
1
@ AlainO'Dea: Tuve exactamente el mismo problema. Sorprendido y preocupado cuando no pude pasar la pantalla de inicio de sesión. Después de investigar un poco, descubrí que puedes usar variables pero tienes que usar una sintaxis diferente. p.ej. PATH DEFAULT = $ {PATH}: $ {HOME} / bin Cuando no está usando una variable, una asignación simple parece funcionar.
tim_wonil
Sí, estoy de acuerdo con @ AlainO'Dea. Si hay algún error en su script, no podrá iniciar sesión. Cuídate.
Evan Hu
13

Intenta estos pasos.

- Vamos a editar "etc \ profile". Las variables de entorno deben ingresarse al final del archivo. Como Ubuntu no da acceso a la carpeta raíz, tendremos que usar algunos comandos en el terminal

Paso 1: Inicie la Terminal. Escriba el comando:gksudo gedit /etc/profile

Paso 2: se abrirá el archivo de texto del perfil. Ingrese las variables de entorno en la parte inferior de la página ........... Por ejemplo: export JAVA_HOME=/home/alex/jdk1.6.0_22/bin/java

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

Paso 3: guarda y cierra el archivo. Compruebe si las variables de entorno se configuran mediante el comando echo ........ Ej. echo $PATH

Alex
fuente
9

Necesita poner definición variable en el ~/.bashrcarchivo.

Desde la página de manual de bash:

Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, bash lee y ejecuta comandos desde /etc/bash.bashrc y ~ / .bashrc, si existen estos archivos.

Paweł Nadolski
fuente
5

Tradicionalmente, si solo desea cambiar la variable en las ventanas de su terminal, configúrela en un .bashrcarchivo, que se obtiene cada vez que se abre un nuevo terminal. .profileel archivo no se obtiene cada vez que abre un nuevo terminal.

Vea la diferencia entre .profile y .bashrc en cuestión: ¿Cuál es la diferencia entre .bashrc, .bash_profile y .environment?

.bashrcDebería resolver su problema. Sin embargo, no es la solución adecuada ya que está utilizando Ubuntu. Consulte la página de ayuda de Ubuntu " Variables de entorno de toda la sesión ". Por lo tanto, no es de extrañar que .profileno funcione para usted. Yo uso Ubuntu 12.04 y xfce. Configuré mi .profiley simplemente no tiene efecto incluso si me desconecto y entro. Experiencia similar aquí . Por lo tanto, puede que tenga que usar el .pam_environmentarchivo y olvidarse por completo .profile, y .bashrc. Y TENGA EN CUENTA que .pam_environmentno es un archivo de script.

HongboZhu
fuente
1

Eche un vistazo bash(1), necesita un shell de inicio de sesión para recoger ~/.profile, es decir, la -lopción.

Nikolai Fetissov
fuente
1

Después de realizar cambios en .profile, debe ejecutar el archivo para que los cambios surtan efecto.

root@masternode# . ~/.profile

Una vez hecho esto, el comando echo funcionará.

CodeShane
fuente
Deberías usar en ~/.profilelugar de ./.profile.
Alexis Wilke