JAVA_HOME未被发现为Sudo

时间:2012-07-13 11:05:12

标签: java linux sudo java-home

我在运行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

3 个答案:

答案 0 :(得分:25)

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

sudo -E env

比较:

sudo env

答案 1 :(得分:1)

“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

答案 2 :(得分:0)

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

sudo java -Djava.home=$JAVA_HOME Test