2

我正在使用TestEnviron=varproperty. 现在,我想编写一个小程序来读取环境变量,将其写入控制台输出,并将变量写入属性文件。但是,当我尝试使用此代码getenv()返回时null

package javaenvironmentvariable;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;

public class JavaEnvironmentVariable {
    public static void main(String[] args) {
        try {
            String variable = System.getenv("TestEnviron");
            System.out.println("TestEnviron: " + variable);
            variable = "TestEnviron=" + variable;

            Properties properties = new Properties();

            File file = new File("Variables.properties");
            FileOutputStream fileout = new FileOutputStream(file);
            properties.store(fileout, variable);
            fileout.close();
        } catch (Exception e) {
        }
    }
}

我在 shell 中使用它来调用 jar:sudo java -jar JavaEnvironmentVariable.jar

4

3 回答 3

4

您应该使用sudo -EANDexport来保留环境变量:

$ export TestEnviron=varproperty
$ sudo -E java -jar JavaEnvironmentVariable.jar

但是,为了更安全,您应该配置 sudo 以保留您的变量,如本文所述:如何在使用 SUDO 时保留环境变量

sudo visudo

并添加这一行:

Defaults env_keep += "TestEnviron"
于 2015-09-13T10:07:17.990 回答
2

Shell 不会自动将其变量放入环境中。您需要使用export ENVVAR=VALUEset -x ENVVAR VALUE根据您的 shell 显式导出变量。

于 2015-09-13T09:55:30.367 回答
0

我认为您正在一个外壳中设置环境变量并在另一个外壳中执行您的程序。尝试在同一个 shell 中执行两者。通过在 shell 中打印环境变量来执行程序检查之前。

于 2015-09-13T09:55:31.307 回答