【问题标题】:Set JAVA_HOME from bash script从 bash 脚本设置 JAVA_HOME
【发布时间】:2014-05-30 11:25:22
【问题描述】:

我正在尝试编写一个在 JDK 和 JRE 以及 x86 和 x64 架构之间切换的脚本。

但是,当我这样做时:echo $PATHecho $JAVA_HOMEecho $JRE_HOME,什么也打印不出来!路径打印但没有添加 java。

我的脚本如下,它在最后导出路径。

#!/bin/bash

#sudo apt-get install oracle-java8-installer

x64_JDK_PATH="/opt/java/jdk1.7.0_51"
x64_JRE_PATH="$x64_JDK_PATH/jre"

x86_JDK_PATH="/opt/java/jdk1.7.0_51_x86"
x86_JRE_PATH="$x86_JDK_PATH/jre"
xJAVA_PATH=""

echo
echo -e "What would you like to switch to?"
echo -e "    1. JDK (Java Development Kit)\n"
echo -e "    2. JRE (Java Runtime Environment)\n"
echo -e "Choice: \c"
read ENV_ANSWER
echo

case $ENV_ANSWER in
    1)
        echo -e "Switching to the JDK (Java Development Kit)\n"
    ;;

    2)
        echo -e "Switching to the JRE (Java Runtime Environment)\n"
    ;;
    *)
        echo -e "Invalid option.\n"
        echo -e "Script terminating.\n"
        exit
    ;;
esac

echo -e "What version would you like to switch to? (x32\\\x64): \c"
read ARCH_ANSWER

if [ $ARCH_ANSWER != "x32" ] && [ $ARCH_ANSWER != "x64" ]
then
    echo -e "Invalid version. Versions are 'x32' and 'x64'."
    echo -e "Script terminating.\n"
    exit
fi

echo "Switching to the $ARCH_ANSWER version."
echo

if [ $ARCH_ANSWER = "x32" ] && [ $ENV_ANSWER = 1 ]
then
    xJAVA_PATH=$x86_JDK_PATH
elif [ $ARCH_ANSWER = "x32" ]
then
    xJAVA_PATH=$x86_JRE_PATH
fi

if [ $ARCH_ANSWER = "x64" ] && [ $ENV_ANSWER = 1 ]
then
    xJAVA_PATH=$x64_JDK_PATH
elif [ $ARCH_ANSWER = "x64" ]
then
    xJAVA_PATH=$x64_JRE_PATH
fi

sudo update-alternatives --install "/usr/bin/java" "java" "$xJAVA_PATH/bin/java" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "$xJAVA_PATH/bin/javaws" 1
if [ $ENV_ANSWER = 1 ]
then
    sudo update-alternatives --install "/usr/bin/javac" "javac" "$xJAVA_PATH/bin/javac" 1
    sudo update-alternatives --install "/usr/bin/javadoc" "javadoc" "$xJAVA_PATH/bin/javadoc" 1
fi
sudo update-alternatives --set java "$xJAVA_PATH/bin/java"


echo
echo -e "Would you like to update your Mozilla Plugins as well? (y\\\n): \c"
read PLUGINS_ANSWER

if [ $PLUGINS_ANSWER = "Y" ] || [ $PLUGINS_ANSWER = "y" ]
then
    rm "$HOME/.mozilla/plugins/libnpjp2.so"
    mkdir -p "$HOME/.mozilla/plugins"
    ln -s "$xJAVA_PATH/jre/lib/amd64/libnpjp2.so" "$HOME/.mozilla/plugins/"
    echo -e "Mozilla Plugins updated.\n"
else
    echo -e "Mozilla Plugins left untouched.\n"
fi

JAVA_HOME=$xJAVA_PATH
JRE_HOME=$xJAVA_PATH
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export JRE_HOME
export PATH

java -version
echo

任何想法有什么问题吗? java -version 打印良好。除了导出路径外,一切正常。

【问题讨论】:

  • @thatotherguy;如果终端关闭,上述评论将不起作用。我试过并关闭了终端。我echo $JAVA_HOME 是空白的。
  • 正确。没有全局环境变量之类的东西。您可以考虑为java 创建一个包装脚本,它使用您需要的参数调用真实的东西,从一些您可以更改的配置文件中读取。

标签: bash export environment-variables


【解决方案1】:

“导出”是脚本的“本地”,请尝试使用source 命令:

. myscript.sh

或者

source myscript.sh

【讨论】:

    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    相关资源
    最近更新 更多