Nit*_*egi 2 java macos bash terminal environment-variables
直到最近我一直在使用 Java 1.7 作为我的代码库,最近我们升级到了 Java 8。当我尝试将 .bash_profile / .bashrc 文件中的 JAVA_HOME 变量设置为:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)
并保存并使用源 .bash_profile,java -version 指向:
Nitin-Vegis-MacBook-Pro:/ nitinsuryavegi$ java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
Run Code Online (Sandbox Code Playgroud)
但是当我退出终端/关闭会话并重新检查 java - 版本时,它指向旧版本,如下所示:
Nitin-Vegis-MacBook-Pro:/ nitinsuryavegi$ java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
Run Code Online (Sandbox Code Playgroud)
你能帮我永久设置 JAVA_HOME 路径,这样我每次登录终端时都不需要运行源 .bash_profile 以将 java -version 从 1.7 更改为 1.8。
也有人可以帮助我理解:
单击此处获取参考,但是当我检查终端中的 java -version 时,它显示为:
java version "1.7.0_79"
Run Code Online (Sandbox Code Playgroud)
关闭终端实例后,JAVA_HOME 未设置/保存到路径变量
那是正确的。在普通 shell 中,当 shell 退出时,您对 shell 中的环境变量所做的更改将丢失。(这适用于 Linux、UNIX、Mac OS 甚至 Windows“cmd.exe”。)
在 Linux、UNIX 和(我猜)Mac OS 上处理此问题的正常方法是将 shell 命令设置所需的变量到 shell 的“rc”文件之一中,或放入您用来运行您的 Java 应用程序(或其他应用程序)。
你能帮我永久设置 JAVA_HOME 路径,这样我每次登录终端时都不需要运行源 .bash_profile 以将 java -version 从 1.7 更改为 1.8。
在 UNIX/Linux 上,一种可能性是将全局设置放入/etc/profile
. 但是,我不知道这是否适合 MacOS。在您的情况下,可能是您将设置放入了错误的文件中,或者您将错误的设置放入了正确的文件中。
但这就是“man bash”关于 shell 初始化的说法(在我的 Linux 系统上):
当 bash 作为交互式登录 shell 或作为具有
--login
选项的非交互式 shell 调用时,它首先从文件中读取并执行命令/etc/profile
(如果该文件存在)。读取该文件后,它会按该顺序查找~/.bash_profile
、~/.bash_login
、 和~/.profile
,并从第一个存在且可读的命令中读取和执行命令。...当一个不是登录 shell 的交互式 shell 启动时,bash 读取并执行来自 的命令
~/.bashrc
(如果该文件存在)。这可以通过使用--norc
选项来禁止。该--rcfile
文件选项将强制bash读取和文件,而不是执行命令~/.bashrc
。
也有人可以帮助我理解:1) .bash_profile 和 .bashrc 文件之间的区别。
看上面。
2) 当我在系统偏好设置中检查 Java 运行时版本时,它已指向 1.8,但是当我运行时
Run Code Online (Sandbox Code Playgroud)$ java -version
我得到这个输出:
Run Code Online (Sandbox Code Playgroud)java version "1.7.0_79"
我的猜测是你的 shell 初始化文件是什么覆盖了你在系统偏好设置中设置的内容。另外,我怀疑您可能误解了 shell 如何查找命令。正如“man bash”所解释的,shell实际上会使用$PATH
变量搜索命令。这是您应该检查的变量,以找出原因java -version
以及whereis java
行为不符合您的预期。
您可以通过键入来检查 shell 中的实际环境变量设置
$ export
Run Code Online (Sandbox Code Playgroud)
3)
$JAVA_HOME
和whereis java
命令有什么区别?
第一个是环境变量......它不是命令搜索路径。第三方工具通常使用它来定位 JDK / JRE。但是 JDK / JRE 工具本身忽略了它!
第二个是内置命令,它试图在 shell 的实际命令搜索路径上查找命令。