使用 sudo 运行命令或直接以超级用户身份运行命令之间的行为不同 - PATH 相同

使用 sudo 运行命令或直接以超级用户身份运行命令之间的行为不同 - PATH 相同

我正在尝试在 xubuntu 上安装 eclipse,我安装了 java sudo gdebi <java-package>.deb,将其添加到了/etc/environmentPATHJAVA_HOME”,然后重新加载了环境并重新启动了整个系统。

运行java --version我得到了正确的输出

java 12.0.1 2019-04-16
Java(TM) SE Runtime Environment (build 12.0.1+12)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)

如果由超级用户调用则两者

$ sudo su
# java --version

或通过

$ java --version

但运行

$ sudo java --version

我有java: command not found

但运行

sudo echo $PATH 

我有

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/jdk-12.0.1/bin/:/snap/bin/

并且存在 java 路径:/usr/lib/jvm/jdk-12.0.1/bin/

我该如何修复它?也有人可以解释我为什么会发生这种情况吗?

答案1

这看起来 PATH 被 sudo 覆盖。

您应该检查是否/etc/sudoers包含secure_path=...设置并将您的 java 路径添加到此设置。


对简单的测试要保持警惕。要确认您的路径,您应该:

sudo bash -c 'echo $PATH'

更简单的形式sudo echo $PATH不起作用,因为在调用PATH之前已展开sudo

相关内容