2014-04-15 134 views
2

我正在尝试编写一个在JDK和JRE以及x86和x64体系结构之间切换的脚本。从bash脚本设置JAVA_HOME

但是,当我这样做: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打印正常。一切正常,除了路径的出口..

+0

的可能重复[从bash脚本更改导出变量的值](http://stackoverflow.com/questions/13796809/changing-the-value-of-a-export-variable-from-a-bash-script) –

+0

@thatotherguy ;如果终端关闭,上述评论不起作用。我试过并关闭了终端。我'回声$ JAVA_HOME',它是空白的。 – Brandon

+0

正确。没有全球环境变量这样的事情。你可以考虑为'java'创建一个包装脚本,它用你需要的参数调用真实的东西,从你可以改变的某个配置文件中读取。 –

回答

2

的“出口”是“本地人”的剧本,尝试用source命令:

. myscript.sh 

或者

source myscript.sh