macos - .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.8
,echo $JAVA_HOME
显示 11 的目录。但在~/test.sh
文件java -version
prints14.0.2
中,$JAVA_HOME
是空的。我试图设置 env varetc/profile
但没有成功。有谁知道可能导致这种情况的原因?
解决方案
欢迎来到 POSIX 半兼容 shell 的美妙世界 :-)
从 bash 手册页:
当 bash 作为交互式登录 shell 或作为带有 --login 选项的非交互式 shell 调用时,它首先从文件 /etc/profile 中读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,并从第一个存在且可读的文件中读取和执行命令。当 shell 启动时,可以使用 --noprofile 选项来禁止这种行为。
请注意,仅运行脚本不会执行~/.bash_profile脚本,因为该脚本既不是交互式的,也不是“登录”shell。一种解决方案是将BASH_ENV
var 设置为适当的初始化脚本。
推荐阅读
- php - 如何在 php shell_exec 中运行多个 ffmpeg 任务
- javascript - 如何在不加载页面且不使用 Cookie 的情况下将 javaScript 变量分配给 PHP 变量
- java - 使用并发锁锁定数组的特定索引 - RentrantLock
- ios - 如何为 CloudKit 通知检索所需的密钥?
- python - 我有一个 txt 文件,想打印特定的单词
- javascript - Javascript Regex:如果尚未替换,则用 URL 替换字符串
- c# - Blazor - 组件包装和数据绑定
- android - 如何在android studio中集成google meet
- python - Tkinter:无论是否选中,复选框值始终为 0
- java - 无法编译 java -jar asp.jar Easter.asp