找不到 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的主要内容,如果未能解决你的问题,请参考以下文章