Warum ist meine Umgebungsvariable nicht über die Befehlszeile sichtbar?

Ich versuche, den James-SMTP-Server auf Lion auszuführen. Wenn ich das mache ...

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

... es funktioniert gut.

Ich möchte jedoch JAVA_HOME zu einer Umgebungsvariablen machen, damit sie auch für andere Anwendungen sichtbar ist.

Ich habe ~/.bash_profile so bearbeitet, dass es so aussieht ...

export JAVA_HOME=/Library/Java/home

... und die Variable scheint von der Befehlszeile aus sichtbar zu sein ...

$ echo $JAVA_HOME
/Library/Java/home

Aber wenn ich James wieder so laufen lasse, erhalte ich eine Warnung über 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.

Irgendwelche Ideen, was ich falsch mache? Warum kann der Befehl zum Ausführen von James die Umgebungsvariable JAVA_HOME nicht sehen?

Jede Info wird sehr geschätzt, danke!

rauben

Antworten (1)

Das Problem besteht darin, dass Sie nicht in Ihrer Umgebung ausgeführt werden, sodass Änderungen an ~/.bash_profile keine Auswirkungen auf den Befehl haben. Es wird für andere Prozesse sichtbar sein

sudo wird als ein anderer Benutzer ausgeführt - in diesem Fall root, da Sie keinen Parameter -u username angegeben haben. Daher müssen Sie die Root-Umgebung ändern, um JAVA_HOME für den Befehl run.sh sichtbar zu machen

Möglicherweise können Sie auch die -EOption verwenden, um sudo; Die Manpages sagen, dass Umgebungsvariablen erhalten bleiben, aber ich habe es nicht getestet.
Danke - welche Datei bearbeite ich, damit die Variable für den Root-Benutzer sichtbar ist? Gibt es auch einen Ort, an dem ich die Variable für das gesamte System sichtbar machen kann? Danke!