Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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
bashshell脚本:如何设置JAVA_HOME环境变量_Java_Bash_Environment Variables - Fatal编程技术网

bashshell脚本:如何设置JAVA_HOME环境变量

bashshell脚本:如何设置JAVA_HOME环境变量,java,bash,environment-variables,Java,Bash,Environment Variables,使用openSUSE,我下载了用于jdk1.6.0_24的Oracle RPM,我想将java home环境变量设置为/usr/java/jdk1.6.0_24,但是/etc/alternations系统无法自动检测这个已安装的JDK。更新替代方案,或者其他什么都找不到jdk 因此,我想在BASH脚本中手动检测JAVA主页 如果我运行以下命令:sudo find/usr-name'jdk1.6*,我将得到以下结果: /usr/java/jdk1.6.0_24 如何将结果导入到环境变量中?我想做

使用openSUSE,我下载了用于jdk1.6.0_24的Oracle RPM,我想将java home环境变量设置为/usr/java/jdk1.6.0_24,但是/etc/alternations系统无法自动检测这个已安装的JDK。更新替代方案,或者其他什么都找不到jdk

因此,我想在BASH脚本中手动检测JAVA主页

如果我运行以下命令:sudo find/usr-name'jdk1.6*,我将得到以下结果:

/usr/java/jdk1.6.0_24
如何将结果导入到环境变量中?我想做一些像

#!/bin/bash
read in JAVA_HOME var from a file
if file doesnt exist
  sudo find /usr -name 'jdk1.6*' 
  prompt user for which jdk is correct
  set that choice to a variable 
  add the JDK to alternatives if it is missing
  save variable to a file and dont prompt next time
  set the alternatives java choice
fi
echo $JAVA_HOME
#!/bin/bash
function validate_java_home {
    if [ -z ${JAVA_HOME} ]
    then
        # do something if the file doesn't provide ${JAVA_HOME}
    else 
        if [ ! -e ${JAVA_HOME} ]
        then
            # do something if the file provides a non existent ${JAVA_HOME}
        fi
    fi
}

if [ ! -e ${YOUR_FILE_NAME_CONTAINING_JAVA_HOME} ]
then
     JAVA_HOME_CANDIDATES=$(find /usr -name 'jdk1.6*')
     echo "Found the following candidates for JAVA_HOME, reply with the one you want then press return"
     echo ""
     echo $JAVA_HOME_CANDIDATES
     read USER_SUBMITTED_JAVA_HOME
     echo "You chose $USER_SUBMITTED_JAVA_HOME"
     JAVA_HOME=${USER_SUBMITTED_JAVA_HOME}
else
    . ${YOUR_FILE_NAME_CONTAINING_JAVA_HOME}
fi 
validate_java_home
export ${JAVA_HOME}

不是坐在linux终端上,但这应该可以让您继续:

...
jdkpath=`sudo find /usr -name 'jdk1.6*'`
export JAVA_HOME=$jdkpath
...
根据需要进行调整。

类似

#!/bin/bash
read in JAVA_HOME var from a file
if file doesnt exist
  sudo find /usr -name 'jdk1.6*' 
  prompt user for which jdk is correct
  set that choice to a variable 
  add the JDK to alternatives if it is missing
  save variable to a file and dont prompt next time
  set the alternatives java choice
fi
echo $JAVA_HOME
#!/bin/bash
function validate_java_home {
    if [ -z ${JAVA_HOME} ]
    then
        # do something if the file doesn't provide ${JAVA_HOME}
    else 
        if [ ! -e ${JAVA_HOME} ]
        then
            # do something if the file provides a non existent ${JAVA_HOME}
        fi
    fi
}

if [ ! -e ${YOUR_FILE_NAME_CONTAINING_JAVA_HOME} ]
then
     JAVA_HOME_CANDIDATES=$(find /usr -name 'jdk1.6*')
     echo "Found the following candidates for JAVA_HOME, reply with the one you want then press return"
     echo ""
     echo $JAVA_HOME_CANDIDATES
     read USER_SUBMITTED_JAVA_HOME
     echo "You chose $USER_SUBMITTED_JAVA_HOME"
     JAVA_HOME=${USER_SUBMITTED_JAVA_HOME}
else
    . ${YOUR_FILE_NAME_CONTAINING_JAVA_HOME}
fi 
validate_java_home
export ${JAVA_HOME}

我还没有测试过这一点,但希望你能了解要点(我想说,根据格伦·杰克曼的回答使用select更简洁/友好,我不知道这是存在的,所以我很高兴我读了这个问题!)

根据马特的回答,我使用的脚本如下:

#!/bin/bash
# JAVA_HOME script for RPM based java installations
# http://www.oracle.com/technetwork/java/javase/install-linux-64-rpm-138254.html
# examine and understand /etc/alternatives before you run this

cd $SITE_HOME

function set_java_home {
  if [ -z $JAVA_HOME ]; then
      echo "Using default value for JAVA_HOME: /usr/java/default"
      JAVA_HOME=/usr/java/default
  fi
  export -p JAVA_HOME
  echo $JAVA_HOME > java.home.config
  echo "JAVA_HOME variable set to $JAVA_HOME ."
}

if [ -f java.home.config ]; then
  JAVA_HOME=$(<java.home.config)
else
  JAVA_HOME_CANDIDATES=$(find /usr -type d -name 'jdk1.6*')
  echo "Found the following candidates for JAVA_HOME. Pick one: "
  echo "---"
  echo $JAVA_HOME_CANDIDATES
  echo "---"
  read USER_SUBMITTED_JAVA_HOME
  echo "You chose $USER_SUBMITTED_JAVA_HOME ."
  JAVA_HOME=${USER_SUBMITTED_JAVA_HOME}
fi
# Set the variable
set_java_home
#/bin/bash
#用于基于RPM的JAVA安装的JAVA_主脚本
# http://www.oracle.com/technetwork/java/javase/install-linux-64-rpm-138254.html
#运行此操作之前,请检查并理解/etc/alternations
cd$SITE_HOME
函数集\u java\u主页{
如果[-z$JAVA_HOME];那么
echo“为JAVA\u HOME使用默认值:/usr/JAVA/default”
JAVA_HOME=/usr/JAVA/default
fi
导出-p JAVA_主页
echo$JAVA_HOME>JAVA.HOME.config
echo“JAVA_HOME变量设置为$JAVA_HOME。”
}
如果[-f java.home.config];然后

爪哇之家酒店=$(为什么你需要sudo来使用find?如果你的用户ID不能读取它,你就不应该在JAVA_HOME中使用该值。你的权利。从我的所有脚本中删除sudo。谢谢。不要因为没有好的理由而习惯于在东西的前面加上
sudo
。让二进制文件由根用户可读,但当前用户不可读有什么好处你?难道你不想至少在那里设置
-typed | head-1
,以防止多次匹配,以及zip文件的匹配等吗?@Mike我在sudo上遵循了OPs脚本,我完全同意
-typed
,并将
head-1
更改为
-maxdepth 1
。但是,它不在OPs scr中ipt和我不能100%确定它为什么不在那里,所以我保留了它。对不起,我没有在OP的脚本中看到
sudo
。这足以让我弄明白。谢谢!谢谢Matt。我在下面以我自己的答案的形式发布了你编辑的脚本。“选择”你在上面使用的方法真的很有趣。我没有想到。事后来看,我会写
choices=(/usr/java/*/)
假设bash。我发布这个答案已经两年了。现在我打算使用这样的方法: