我有两个 shell 脚本。
$ cat java_alternative_7
#!/bin/sh
sudo update-java-alternatives -s java-7-oracle
$ cat java_home_7
#!/bin/sh
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
我可以执行/获取这两个文件,这很简单。
$ sh java_alternative_7
$ javac -version
javac 1.7.x_yy
$ source java_home_7
$ echo $JAVA_HOME
/usr/lib/jvm/java-7-oracle
如何一次完成这两个步骤?
答案1
如果您不想合并脚本,如
#!/bin/sh
sudo \
env JAVA_HOME=/usr/lib/jvm/java-7-oracle \
update-java-alternatives -s java-7-oracle
你可以使用
#!/bin/sh
sudo \
env BASH_ENV=path/to/java_home_7 \
bash -c 'update-java-alternatives -s java-7-oracle'
这将导致脚本在从with 开始的内联脚本update-java-alternatives
中运行。该实用程序将环境变量设置为设置环境变量的脚本的路径名。这会导致脚本在调用实用程序之前自动获取其他脚本的源。bash -c
env
sudo
env
BASH_ENV
JAVA_HOME
bash -c
update-java-alternatives
使用env
设置环境变量可确保设置变量,即使sudo
最初可能会清除环境。
答案2
我不确定我是否意识到自己在做什么。任何意见或建议将不胜感激。
$ cat java7
#!/bin/sh
alternative=java-7-oracle
sudo update-java-alternatives -s $alternative
export JAVA_HOME=/usr/lib/jvm/$alternative
$ cat java8
#!/bin/sh
alternative=java-8-oracle
sudo update-java-alternatives -s $alternative
export JAVA_HOME=/usr/lib/jvm/$alternative
$ . java7;javac -version;echo $JAVA_HOME
javac 1.7.x_yy
/usr/lib/jvm/java-7-oracle
$ . java8;javac -version;echo $JAVA_HOME
javac 1.8.x_yy
/usr/lib/jvm/java-8-oracle
更新
我正在为自己和任何需要的人进行更新。
首先,我将以下行添加到我的~/.bashrc
.
#http://serverfault.com/a/276221/113357
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
还有我的新~/bin/java_home
剧本。
#!/bin/bash
if [ $# -ne 1 ]
then
echo please select a jname.
update-java-alternatives -l
return;
fi
jname=$1
sudo update-java-alternatives -s $jname
source ~/.bashrc
当我想更改 JDK 时,我就会这样做。
$ source java_home java-7-oracle
$ source java_home java-8-oracle
JAVA_HOME
即使在任何新终端中,该变量也会发生变化。以前java7
和java8
改成这样。
$ echo java7
#!/bin/sh
source java_home java-7-oracle
$ echo java8
#!/bin/sh
source java_home java-8-oracle
$