14

我在运行 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我自己设置的命令?

4

3 回答 3

32

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

sudo -E env

相比于:

sudo env
于 2012-07-13T11:13:30.197 回答
1

没有导出 JAVA_HOME 时,“sudo -E”没有解决问题。并且当它被导出时,没有 -E 的“sudo”的工作方式相同。

所以你可以添加export JAVA_HOME=.../jdk<version>你的 .bash_profile 和 .bashrc 文件。

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

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

if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi
于 2014-05-21T18:55:42.670 回答
-1

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

sudo java -Djava.home=$JAVA_HOME Test

于 2015-03-06T21:01:50.660 回答