找不到 JAVA_HOME 作为 Sudo

Posted

技术标签:

【中文标题】找不到 JAVA_HOME 作为 Sudo【英文标题】:JAVA_HOME not found as Sudo 【发布时间】:2012-07-13 05:32:48 【问题描述】:

我在运行 Jar 文件的 Linux 机器上有一个 bash 脚本。以普通用户身份登录时,我没有运行脚本的权限,但它会打印以下日志:

*INFO * Using JVM found at /opt/jdk6/bin/java

当我尝试将脚本与 Sudo 一起使用时,它给出了:

*ERROR* Unable to locate java, please make sure java is installed and JAVA_HOME set

我已将JAVA_HOME 设置为与上面相同的路径——可以通过echo $JAVA_HOME 看到它,并且它也被设置为脚本中的一个选项。我很高兴脚本不是问题——它是一个默认的 CQ5 控制脚本,我在其他几十个盒子上使用它没有问题。只是不确定我在上面做错了什么并假设这是我在 Linux 设置上缺少的东西?

当我运行sudo 命令时,它是否可以访问我自己设置的JAVA_HOME

【问题讨论】:

echo $JAVA_HOME 作为 root 用户和普通用户的确切输出是什么? 安德鲁,我没有作为机器上的 root 用户本身(不是系统管理员)的访问权限,就像 sudoer 一样。刚刚在这里发现了问题:unix.stackexchange.com/questions/6127/… Sudo 正在剥离环境变量,使用 sudo -E 标志管理它 我相信这取决于发行版 - 有些 sudo 保留 envs,有些则没有 【参考方案1】:

默认情况下,sudo 将清理生成命令的环境。通过-E 保留它:

sudo -E env

比较:

sudo env

【讨论】:

谢谢老兄,刚刚在unix.stackexchange上同时找到了:)【参考方案2】:

"sudo -E" 没有解决 JAVA_HOME 未导出时的问题。并且当它被导出时,没有 -E 的“sudo”的工作原理是一样的。

因此您可以在 .bash_profile 和 .bashrc 文件中添加 export JAVA_HOME=.../jdk<version>

如果您想知道 .bash_profile 和 .bashrc 的区别是什么,请在登录时执行 .bash_profile(例如,显示一些诊断/欢迎信息)。 .bash_rc 在您打开一个新终端时执行(例如,shift-ctrl-T)。

为了在这两种情况下运行一些命令,你可以把它放在 .bashrc 文件中,并让 .bash_profile 源 .bashrc:

if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi

【讨论】:

【参考方案3】:

你总是可以像这样显式地将它传递给 java:

sudo java -Djava.home=$JAVA_HOME Test

【讨论】:

以上是关于找不到 JAVA_HOME 作为 Sudo的主要内容,如果未能解决你的问题,请参考以下文章

sudo:命令:在 CentOS 6 上找不到命令

sudo xx 找不到命令

找不到或无法加载主类!

在 sudo 上找不到命令

[转]Linux中root用户找不到JAVA_HOME

Linux中root用户找不到JAVA_HOME