Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
找不到JAVA_HOME作为Sudo_Java_Linux_Sudo_Java Home - Fatal编程技术网

找不到JAVA_HOME作为Sudo

找不到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

我有一个运行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

默认情况下,
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上发现:)