我正在尝试在linux中设置环境变量。我按照这里的说明进行操作:Make $JAVA_HOME easily changable in Ubuntu
尽管使用source /etc/environment
并使用echo MY_VAR
来验证linux是否检测到变量,但我的java应用程序不会接收它。变量继续返回null
public static void main(String[] args) throws IOException {
System.out.print(System.getenv("MY_VAR"));
我正在通过sudo java -jar /path/to/my.jar
更新:我的错误,我没有包含正确的命令。我其实是在撒谎。
答案 0 :(得分: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
答案 1 :(得分: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 -c export MY_ENVIRONMENT="HELLO";java -jar /path/to/my.jar
或沿着这些方向的东西
答案 2 :(得分:1)
问题是sudo使用自己的一组环境变量运行。您可以将变量添加到根环境(有时是挑剔的),或者告诉sudo明确地维护当前环境的变量。
以下是你如何做后者:
vim ~/.bash_profile
export MY_VAR=80
sudo visudo
Defaults env_keep +="MY_VAR"
现在当你运行sudo java -jar /path/to/my.jar
时,它应该可以正常工作,MY_VAR设置为80.