如何在 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:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章
我应该在 macOS X 10.6 上设置啥 JAVA_HOME 环境变量?