¿Por qué mi variable de entorno no está visible desde la línea de comando?

Estoy tratando de ejecutar el servidor james smtp en Lion. Cuando hago esto...

sudo JAVA_HOME=/Library/Java/Home ./james-2.3.2/bin/run.sh

... funciona bien.

Sin embargo, me gustaría hacer de JAVA_HOME una variable de entorno para que también sea visible para otras aplicaciones.

Edité ~/.bash_profile para que se vea así...

export JAVA_HOME=/Library/Java/home

... y la variable parece ser visible desde la línea de comando así...

$ echo $JAVA_HOME
/Library/Java/home

Pero cuando vuelvo a ejecutar james así, recibo una advertencia sobre JAVA_HOME...

$ sudo ./james-2.3.2/bin/run.sh
ERROR: JAVA_HOME not found in your environment.

Please, set the JAVA_HOME variable in your environment to match the
location of the Java Virtual Machine you want to use.

¿Alguna idea de lo que estoy haciendo mal? ¿Por qué el comando para ejecutar james no puede ver la variable de entorno JAVA_HOME?

Cualquier información es muy apreciada, gracias!

Robar

Respuestas (1)

El problema es que no está ejecutando en su entorno, por lo que cualquier cambio en ~/.bash_profile no tendrá efecto en el comando. Será visible para otros procesos.

sudo se ejecuta como otro usuario; en este caso, root, ya que no ha proporcionado un parámetro de nombre de usuario -u. Por lo tanto, debe cambiar el entorno raíz para que JAVA_HOME sea visible para el comando run.sh

También puede usar la -Eopción para sudo; las páginas de manual dicen que conserva las variables de entorno, pero no lo he probado.
Gracias, ¿qué archivo edito para que la variable sea visible para el usuario raíz? Además, ¿hay algún lugar donde pueda hacer que la variable sea visible para todo el sistema? ¡Gracias!