首页 > 解决方案 > .sh 文件和终端 MAC 中的不同 java 版本

问题描述

我正在尝试在 macOS 10.14 中设置 JAVA_HOME。目前安装了 2 个 jdk 版本(jdk-11.0.8.jdk, jdk-14.0.2.jdk/Library/Java/JavaVirtualMachines,我已经导出了 env 变量.bash_profile

export JAVA_HOME=`/usr/libexec/java_home -v 11`

在终端一切正常。java -version打印11.0.8echo $JAVA_HOME显示 11 的目录。但在~/test.sh文件java -versionprints14.0.2中,$JAVA_HOME是空的。我试图设置 env varetc/profile但没有成功。有谁知道可能导致这种情况的原因?

标签: macosenvironment-variablesmacos-mojavejava-home

解决方案


欢迎来到 POSIX 半兼容 shell 的美妙世界 :-)

从 bash 手册页:

当 bash 作为交互式登录 shell 或作为带有 --login 选项的非交互式 shell 调用时,它首先从文件 /etc/profile 中读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,并从第一个存在且可读的文件中读取和执行命令。当 shell 启动时,可以使用 --noprofile 选项来禁止这种行为。

请注意,仅运行脚本不会执行~/.bash_profile脚本,因为该脚本既不是交互式的,也不是“登录”shell。一种解决方案是将BASH_ENVvar 设置为适当的初始化脚本。


推荐阅读