在MacOS Big Sur上导出到$JAVA_HOME时出现权限错误

10
无论我尝试在我的.zshenv或.zshrc文件中设置Java Home export JAVA_HOME=$(/Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home),在启动终端时都会遇到一个错误/Users/{USER NAME HERE}/.zshenv:1: permission denied: /Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home。事实上,我似乎无法导出任何东西(例如,export TEST=$(/Users/{USER NAME HERE}) 给我一个 zsh: permission denied: /Users/{USER NAME HERE} 错误。我已经在系统偏好设置中授予了完全磁盘访问权限,但这似乎也没有起作用。我是计算机上唯一的用户。
3个回答

18

$(foo) 表示大致意思为:"运行 foo 作为程序,然后将其输出插入到此处,并继续执行,就好像我已经键入了它",这不是你想要的。只需执行以下操作:

export JAVA_HOME=/Library/Java/...

$() 这部分在你使用 Mac 的 Java 选择机制时非常有用,比如运行:

export JAVA_HOME=$(/usr/libexec/java_home -v16)

在这种情况下,您正在运行程序,并将 JAVA_HOME 设置为该程序的输出。

即使没有$(),我仍然收到“权限被拒绝”的错误... - Mathew Ruberg
@MathewRuberg 如果在一个简单的“导出”操作中遇到了权限错误,那么你肯定做错了某些事情,但很难确定是什么。我建议你提一个新问题,详细说明你做了什么以及得到了什么错误信息。然而,有可能会因为不适合在Stack Overflow上讨论而被关闭,更适合其他网站。 - Ture Pålsson

3
今天遇到了同样的问题,找到了解决方法。在修改配置文件后,请记得关闭/打开你的命令行窗口(或者重新加载它)。
在Z shell中,与bash不同的是,export语句有点不同,因为您可以在不使用$()的情况下设置环境变量。
所以,不要再使用: export JAVA_HOME=$(/Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home) 而是使用更简单的zsh形式,并用引号将路径括起来: export JAVA_HOME="/Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home"

1
您的答案可以通过增加支持性信息来改进。请[编辑]以添加更多详细内容,例如引用或文档,以便其他人可以确认您的答案是否正确。您可以在帮助中心中找到有关如何编写好答案的更多信息。 - Community
请注意,这不是zsh和bash之间的差异,而是完全执行不同任务的差异。$()在两个shell中执行相同的操作。 - Ture Pålsson

0
发布我的修复方法,以防对其他人有所帮助(或者下次我再遇到这个问题时有所帮助)。这是在2021年的M1 MacBook Pro(Ventura 13.3.1 a)上完成的 - 如果你在2-3年后看到这篇文章,希望能为你节省一些时间。
我在尝试使用Expo的本地模块教程(https://docs.expo.dev/modules/native-module-tutorial/)时遇到了权限问题 - iOS有自己的问题,涉及到ruby/gem版本混乱,而在Android上,我在上述问题以及设置$JAVA_HOME时遇到了问题 - 我想配置全局版本的JAVA,以便Expo能够正确构建。
我通过使用JENV(https://www.jenv.be/)和使用Android Studio来获取几个JDK版本来解决了这个错误(Settings -> Build, Execution, Deployment -> Build Tools -> Gradle) - 你可以在这里轻松下载新的Gradle JDK。
Openjdk版本20是我之前安装的(通过brew),似乎与expo的代码存在编译问题,所以我安装了Corretto v17(通过Android Studio)。在Android Studio中,我可以看到这个JDK的主目录,所以我能够将其添加到JENV的可用版本中(jenv add ~~~jdk主目录在这里~~~),然后将其设置为全局版本jenv global 17 - 从那时起,$JAVA_HOME的问题似乎得到了解决,因为编译器能够找到并使用正确的版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接