4

我正在尝试在 linux 中设置环境变量。我按照这里的说明进行操作:在 Ubuntu 中轻松更改 $JAVA_HOME

尽管使用source /etc/environment和使用echo MY_VAR来验证 linux 检测到变量,但我的 java 应用程序不会接受它。变量继续返回null

public static void main(String[] args) throws IOException {
    System.out.print(System.getenv("MY_VAR"));

我正在通过执行我的 java 应用程序sudo java -jar /path/to/my.jar

更新:我的错误,我没有包含正确的命令。我其实是在sudoing。

4

3 回答 3

3

您需要导出变量

export MY_VAR=stackoverflow
java -jar /path/to/my.jar

然后你可以打印值

System.out.print(System.getenv("MY_VAR"));

编辑:简短的示例脚本(必要时修改路径)

#!/bin/sh

MY_VAR="foobaz not exported"
echo "MY_VAR: ${MY_VAR}"
java -jar my.jar

export MY_VAR="foobaz exported"
echo "MY_VAR: ${MY_VAR}"
java -jar my.jar
于 2013-10-09T12:14:37.550 回答
1

从链接的答案..

在要更新变量的每个 shell 中执行“source /etc/environment”:

当您致电时,java -jar /path/to/my.jar我认为您将启动一个新的 shell,这意味着 ./etc/environment 的内容将无法用于运行您的 java 代码的 shell。

尝试

export MY_ENVIRONMENT="HELLO"
java -jar /path/to/my.jar

这样看起来更好吗?

如果你是 sudo -ing 你的命令......

sudo -c export MY_ENVIRONMENT="HELLO";java -jar /path/to/my.jar

或类似的规定

于 2013-10-09T12:12:21.850 回答
1

问题是 sudo 使用它自己的一组环境变量运行。您可以将变量添加到根环境(有时很挑剔),或者告诉 sudo 显式维护当前环境的变量。

以下是你将如何做后者:

  1. 打开你的 bash 个人资料 vim ~/.bash_profile
  2. 将环境变量添加到文件中export MY_VAR=80
  3. 打开 sudoers 配置文件sudo visudo
  4. 将以下行添加到文件中Defaults env_keep +="MY_VAR"

现在,当您运行sudo java -jar /path/to/my.jar它时,它应该可以正常工作,并将 MY_VAR 设置为 80。

于 2015-01-05T16:10:31.307 回答