找不到JAVA_HOME作为Sudo
我有一个运行Jar文件的Linux机器上的bash脚本。作为普通用户登录时,我没有运行脚本的权限,但它会打印以下日志:找不到JAVA_HOME作为Sudo,java,linux,sudo,java-home,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设置为上面相同的路径-可以使用ech
*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
。默认情况下,sudo
将清理生成命令的环境。传递-E
以保留它:
sudo -E env
与之相比:
sudo env
当JAVA_HOME没有导出时,“sudo-E”并没有解决这个问题。当它被导出时,不带-E的“sudo”工作原理是一样的
因此,您可以在.bash_概要文件和.bashrc文件中添加export JAVA_HOME=…/jdk
如果您想知道.bash_profile和.bashrc有什么区别,.bash_profile在登录时执行(例如,显示一些诊断/欢迎信息)。当您打开一个新的终端(例如shift-ctrl-T)时,将执行bash_rc
为了为这两种情况运行一些命令,您可以将其放入.bashrc文件中,并让.bash_profile source.bashrc:
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
您总是可以像这样显式地将其传递给java:
sudo java-Djava.home=$java_home Test
作为root用户和普通用户,echo$java_home
的确切输出是什么?Andrew,我作为root用户本身在机器上没有访问权限(不是系统管理员),就像sudoer一样。不过在这里刚刚发现了问题:Sudo正在剥离环境变量,使用Sudo-E
flag管理它。我相信这取决于发行版-一些Sudo保留env,另一些Sudo不匹配,只是同时在unix.stackexchange上发现:)