2つのシェルスクリプトがあります。
$ 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
これら2つのステップを同時に完了するにはどうすればよいですか?
答え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'
これにより、スクリプトがで始まるインラインスクリプトで実行されます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
$