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=VALUE
或 set -x ENVVAR VALUE
显式导出变量,具体取决于您的 shell.
我认为您在一个 shell 中设置环境变量并在另一个 shell 中执行您的程序。尝试在同一个 shell 中执行两者。在通过在 shell.
中打印环境变量来执行程序检查之前
您应该使用 sudo -E
和 export
来保留环境变量:
$ 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"
我在 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=VALUE
或 set -x ENVVAR VALUE
显式导出变量,具体取决于您的 shell.
我认为您在一个 shell 中设置环境变量并在另一个 shell 中执行您的程序。尝试在同一个 shell 中执行两者。在通过在 shell.
中打印环境变量来执行程序检查之前您应该使用 sudo -E
和 export
来保留环境变量:
$ 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"