我想在同一台机器(Linux Mint 17)上运行不同版本的 Java,默认运行 Java 7。所以我把它放入/etc/environment
:
JAVA_HOME="/tools/java/java7"
JAVA7_HOME="/tools/java/java7"
JAVA8_HOME="/tools/java/java8"
并且/etc/profile
:
export PATH="${JAVA_HOME}/bin:...:${PATH}"
如果等于,则期望值java -version
为 8,如果设置为指向 Java 7,则期望值为 7。JAVA_HOME
/tools/java/java8
因此,我运行:
┌[madhead@madhead-mint:~/Projects/thymeleaf]
└─$ export JAVA_HOME=/tools/java/java8 && java -version
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) Server VM (build 24.60-b09, mixed mode)
和
┌[madhead@madhead-mint:~/Projects/thymeleaf]
└─! $ export JAVA_HOME=/tools/java/java7 && java -version
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) Server VM (build 24.60-b09, mixed mode)
无论它JAVA_HOME
$PATH
看起来如何:
┌[madhead@madhead-mint:~/Projects/thymeleaf]
└─$ echo $PATH
/home/madhead/bin:/usr/local/bin:/tools/java/java7/bin:...:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
还有export JAVA_HOME=/tools/java/java8 && which java
输出/tools/java/java7/bin/java
。
因此,看起来当我登录时会出现真正的替换。这种行为可以改变吗?如果我可以使用环境变量而不是符号链接来解决这个问题,那就太好了。
答案1
您说得对,定义 PATH 时会发生替换。解决这个问题很简单。定义一个bash
/zsh
函数:
javaswitch() { [[ "$1" =~ ^[0-9]$ ]] && export PATH=${PATH/java[0-9]/java$1}; }
现在,无论何时您想要切换 Java 版本,请运行:
javaswitch 7
或者:
javaswitch 8
为了使定义javaswitch
永久化,请将其放在您的~/.bashrc
文件中。
怎么运行的
[[ "$1" =~ ^[0-9]$ ]]
为了防止输入错误,此测试确保参数是数字。如果不是,则不进行任何更改。
如果您确定只使用版本 7 或 8,那么请改用:
[[ "$1" =~ ^[7-8]$ ]]
export PATH=${PATH/java[0-9]/java$1}
这使用模式替换将 PATH 更新为新的版本号。