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