如何在 MacOS 上设置环境变量? zsh:没有这样的文件或目录

Posted

技术标签:

【中文标题】如何在 MacOS 上设置环境变量? zsh:没有这样的文件或目录【英文标题】:How to set env variables on MacOS? zsh: no such file or directory 【发布时间】:2020-10-28 14:28:56 【问题描述】:

我导出了环境变量(PYTHON、SPARK、ZEPELLIN)。我看了Setting environment variables on OS。

我想运行 Apache Zeppelin 笔记本。

grep -E "^setenv" /etc/launchd.conf | xargs -t -L 1 launchctl
launchctl setenv JAVA_HOME /Library/java/JavaVirtualMachines/adoptopenjdk-8.jdk/contents/Home/
launchctl setenv JRE_HOME /Library/java/JavaVirtualMachines/openjdk-14.0.1.jdk/contents/Home/jre/
launchctl setenv SPARK_HOME /usr/local/Cellar/apache-spark/2.4.5/libexec
launchctl setenv SBT_HOME /usr/local/bin/sbt
launchctl setenv ZEPPELIN_HOME /usr/local/bin/zeppelin-0.9.0-preview1-bin-all
launchctl setenv PYSPARK_PYTHON /usr/local/bin/python3.8
launchctl setenv PYSPARK_DRIVER_PYTHON jupyter
launchctl setenv PYSPARK_DRIVER_PYTHON_OPTS notebook
launchctl setenv PYTHON_HOME /usr/local/Cellar/python@3.8/3.8.3/Frameworks/Python.framework/Versions/3.8/bin

当我尝试运行时:

bin/zeppelin-daemon.sh start

我明白了:

zsh: no such file or directory: bin/zeppelin-daemon.sh

同样的错误

zeppelin-0.9.0-preview1-bin-all/bin/zeppelin-daemon.sh

我检查了环境变量

echo $[ZEPPELIN_HOME]
0

我删除了 .zshrc 并编辑了 ~./zprofile

export JAVA_HOME=/Library/java/JavaVirtualMachines/adoptopenjdk-8.jdk/contents/Home/
export JRE_HOME=/Library/java/JavaVirtualMachines/openjdk-14.0.1.jdk/contents/Home/jre/
export SPARK_HOME=/usr/local/Cellar/apache-spark/2.4.5/libexec
export SBT_HOME=/usr/local/bin/sbt
export ZEPPELIN_HOME=/usr/local/bin/zeppelin-0.8.1-bin-all
export PYSPARK_PYTHON=/usr/local/bin/python3.8
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS='notebook'

export PATH=$JAVA_HOME/bin:$SPARK_HOME:$SPARK_HOME/bin:$SPARK_HOME/sbin:$SBT_HOME/bin:$ZEPPELIN_HOME/bin:$PATH
export PATH=$PYTHON_HOME/usr/local/Cellar/python@3.8/3.8.3/Frameworks/Python.framework/Versions/3.8/bin:$PATH

现在 echo $[JAVA_HOME] 显示

zsh: bad math expression: operand expected at `/Library/j...'

为什么? 如何解决这个问题?

【问题讨论】:

如果在启动程序时提供了显式路径组件,如在执行bin 时执行bin/zeppelin-daemon.sh,则不会搜索 PATH 并且该文件必须存在于工作目录下的那个位置.您在这里收到的错误消息与环境无关。当然脚本一旦启动,环境一定是正确的,但你显然还没有走到这一步。 除此之外,存储 zsh 环境变量的好地方是~/.zshenv,因为这是您的主目录中唯一的文件,保证每次调用 zsh 都会处理该文件。请参阅man zsh 中标题为 INVOCATION 的部分。 【参考方案1】:

我搜索了一下,发现应该将 Catalina OS 环境变量放入

.zshrc

现在一切正常。

【讨论】:

将环境变量放入.zprofile.zshrc 由每个交互式 shell 提供,它们通常可以从初始登录 shell 继承环境变量(这就是 .zprofile 的来源)。 @chepner 谢谢,但这有什么不同呢? 如果您启动一个新的交互式 shell,它可以避免不必要地重置(或更糟的是,冗余地附加到)现有值。 Jenkins 没有在 your 环境中运行,如果它启动一个交互式 shell,它会获取 .zshrc,我会感到惊讶。 zsh 是一个 shell,就像 bash,每个 shell 都有自己的配置文件。可能您正在寻找一个在系统范围内有效的解决方案,而 .zshrc 不是这种情况:只有在启动 zsh shell 时才会加载此文件中设置的变量。如果将在 bash 中执行外部命令,将找不到该变量!查看这篇文章:medium.com/@youngstone89/…

以上是关于如何在 MacOS 上设置环境变量? zsh:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

zsh:找不到命令:php

mac使用homebrew安装nvm

我应该在 macOS X 10.6 上设置啥 JAVA_HOME 环境变量?

Tools/macOS系列macOS终端配置:zsh+iTerm2+OhMyZsh

Mac 系统上的环境变量不生效

sh 在构建eXist 3.x所需的macOS上设置JAVA_HOME环境变量的指令