env コマンドを使用して JAVA_HOME 一時値を変更する方法

env コマンドを使用して JAVA_HOME 一時値を変更する方法

私は作業にopenjdkを使用しますが、時にはoracleのJREが必要な場合があります。私はこれを達成するために "env"コマンドを使うことができると思いましたが、なぜそれがうまくいかないのかわかりません。実行すると、openjdk/usr/lib/jvm/java-1.8.0-openjdk-amd64とoracle jdkがあります。以下を取得します。/usr/lib/jvm/jdk-8-oracle-x64env JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-x64 java -version

java version "1.7.0_75" OpenJDK Runtime Environment (IcedTea 2.5.4) (7u75-2.5.4-3) OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)

しかし、試してみるとenv JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-x64 env|grep JAVA 次のようになります。

JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-x64

私はこれがプロセスの分岐と継承とある程度関連していると感じています。私は単にエクスポート名=変数コマンドなどを使用できることを知っています。ただし、「env」コマンドを使用する場合と使用方法の説明をお願いします。ありがとうございます! (私はDebian Linux、不安定なリポジトリを使用しています)

答え1

envコマンドを使用してこれを実行できますが、いくつかの回避策を使用してを呼び出す必要があります。sh次のコードスニペットをご覧ください。

# env var=bla echo $var
>
# env var=bla sh -c 'echo $var'
> bla
# echo $var
>

以下を使用してより多くの情報を見つけることができます。info coreutils 'env invocation'

残念ながらこれがなぜsh -c ''

envやや直感的ではない行動を示すようです...

# env PATH= echo $PATH
> env: echo: No such file or directory
# env PATH= /bin/echo $PATH
> /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

関連情報