如何使用 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,不稳定的repo)

答案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

相关内容