如果我在Ubuntu中运行echo $XDG_CURRENT_DESKTOP
和sudo echo $XDG_CURRENT_DESKTOP
,我会在两种情况下都获得Unity
。如果我在Java中编写System.getenv("XDG_CURRENT_DESKTOP")
,当我运行没有超级用户权限的程序时它返回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
答案 0 :(得分:3)
因为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
。
答案 1 :(得分:2)
环境变量的另一个问题是没有将它们复制到超级用户的环境中(因此它们的值将是null
):
使用-E
标志执行此操作
sudo -E <command>