为什么我的环境变量在命令行中不可见?

为什么我的环境变量在命令行中不可见?

我正在尝试在 Lion (Mac OS X 10.7.2) 上运行 James SMTP 服务器。当我这样做时:

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

效果很好。

但是,我想将 JAVA_HOME 设置为环境变量,以便其他应用程序也可以看到它。

我编辑 ~/.bash_profile 如下所示:

export JAVA_HOME=/Library/Java/home

并且该变量似乎从命令行可见,如下所示:

$ echo $JAVA_HOME
/Library/Java/home

但是当我像这样再次运行 james 时,我收到有关 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.

有什么想法我做错了吗?为什么运行 james 的命令看不到 JAVA_HOME 环境变量?

非常感谢任何信息,谢谢!

答案1

sudo将环境变量重置为安全默认值。

如果您想保留该变量,您需要visudo添加以下内容:

Defaults env_keep = "JAVA_HOME"

请注意,将用户环境变量传递给特权帐户可能存在安全风险。

答案2

我不确定 Lion 是否有/etc目录(我假设有),或者是否/etc/bashprofile实际上/etc/bashrc在该目录中,但如果您想在系统范围内进行此更改,只需查找这些文件中的任何一个,编辑它,然后在那里进行更改:

export PATH=$PATH:/path/to/Java/

下次登录将获取更改并将被保留。

相关内容