Cómo cambiar JAVA_HOME con un script Bash

1

He creado una secuencia de comandos Bash con la siguiente línea:

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home" 2> bash_errors.txt

También he hecho el archivo ejecutable

chmod 777 bash_test

Cuando ejecuto el script y compruebo

java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

Sin embargo, si ejecuto directamente en Bash

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home"

Y luego marque

java -version
java version "1.7.0_75"
Java(TM) SE Runtime Environment (build 1.7.0_75-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.75-b04, mixed mode)

La ruta cambia. Además, si cambio la línea de script a

sudo export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home" 2> bash_errors.txt

Obtengo lo siguiente en el archivo bash_errors.txt

sudo: export: command not found

Así que sé que el script se está ejecutando, pero JAVA_HOME no cambia cuando se ejecuta desde el script.

¿Qué no estoy entendiendo? ¿Cómo cambio la variable de entorno JAVA_HOME desde un script?

Mi objetivo es permanentemente cambiar JAVA_HOME de 8 a 7; eventualmente agregaré .bash_profile a mi directorio predeterminado.

  

Editar

Los intentos de cambiar los archivos mencionados en la referencia vinculada son de solo lectura, incluso usando sudo vim :

    
pregunta Roy Hinkley 10.12.2015 - 17:06

1 respuesta

2

Cuando está ejecutando una secuencia de comandos, está creando un nuevo proceso fuera del shell interactivo que dura la longitud de la secuencia de comandos.

Por defecto, este proceso hijo hereda su entorno de shell interactivo, y puede modificarlo / modificarlo. Por lo tanto, el contenido del entorno JAVA_HOME se modifica en el proceso secundario, pero el proceso secundario no puede afectar el entorno del proceso principal en su shell interactivo.

Puede configurar el entorno para su shell interactivo en varios lugares, dependiendo del shell (~ / .bash_profile es uno para bash como mencionó en su pregunta). Consulte la respuesta vinculada en el comentario a su pregunta para conocer la mejor manera de establecer valores de entorno de forma permanente.

    
respondido por el jmhindle 10.12.2015 - 17:35

Lea otras preguntas en las etiquetas