如果我在 Ubuntu 中运行 echo $XDG_CURRENT_DESKTOP
和 sudo echo $XDG_CURRENT_DESKTOP
,在这两种情况下我都会得到 Unity
。如果我在Java中编写System.getenv("XDG_CURRENT_DESKTOP")
,当我在没有 super 用户权限的情况下运行程序时,它会返回Unity
,但它会返回null
当我使用 sudo
运行它时。这是怎么回事?
public class GetEnv {
public static void main(String[] args) {
System.out.println(System.getenv("XDG_CURRENT_DESKTOP"));
}
}
这是输出:
$ echo $XDG_CURRENT_DESKTOP
$ Unity
$ sudo echo $XDG_CURRENT_DESKTOP
$ Unity
$ javac GetEnv.java
$ java GetEnv
$ Unity
$ sudo java GetEnv
$ null
最佳答案
因为你的sudo
是错误的。
sudo echo $XDG_CURRENT_DESKTOP
将扩展为
sudo echo Unity
在以 root 身份执行之前。
如果您想保留运行 sudo 的用户的设置,您需要定义应保留在 sudo 配置中的环境变量。
Defaults:suboptimal env_keep += "XGD_CURRENT_DESKTOP", !requiretty
suboptimal your_host=NOPASSWD: /user/bin/java
然后你可以运行你的命令
sudo java GetEnv
它应该显示调用用户的设置。在你的情况下Unity
。
关于java - 当 super 用户时 System.getenv() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29510845/