Java getenv() returns 空

Java getenv() returns null

我在 Linux shell 和 TestEnviron=varproperty 中定义了一个环境变量。现在,我想编写一个小程序来读取环境变量,将其写入控制台输出,然后将变量写入属性文件。但是,当我使用此代码尝试时 getenv() returns 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

Shell 不会自动将它们的变量放入环境中。您需要使用 export ENVVAR=VALUEset -x ENVVAR VALUE 显式导出变量,具体取决于您的 shell.

我认为您在一个 shell 中设置环境变量并在另一个 shell 中执行您的程序。尝试在同一个 shell 中执行两者。在通过在 shell.

中打印环境变量来执行程序检查之前

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

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

然而,为了更安全,您应该配置 sudo 以保留您的变量,如 post 中所述:How to keep Environment Variables when Using SUDO :

sudo visudo

并添加这一行:

Defaults env_keep += "TestEnviron"