【问题标题】:global environmental variable not defined in .sh, but defined in console全局环境变量未在 .sh 中定义,但在控制台中定义
【发布时间】:2020-07-01 15:01:14
【问题描述】:

我正在使用zsh,我在~/.zshrc中定义了新的全局环境变量

echo $0
-zsh

echo $PATH_TO_BINARY 来自控制台打印 /Users/user/some_path

但是,如果我创建带有内容 echo $PATH_TO_BINARYrun_me.sh,它不会打印任何内容。

在 python 中相同:

python -c "import os; print(os.environ['PATH_TO_BINARY'])"

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 679, in __getitem__
    raise KeyError(key) from None
KeyError: 'PATH_TO_BINARY'

【问题讨论】:

  • 所以我猜 Python 部分与问题无关,是吗?
  • 我不明白应该在哪里定义PATH_TO_BINARYecho $0; -zsh 应该这样做吗?
  • 你在run_me.sh中使用的是哪个shell?你在shebang中使用zsh吗?或者只是/bin/bash
  • 什么时候稳定 PATH_TO_BINARY 环境变量?在调用 python 之前是否在 .sh 中?如果是这样,python 将无法识别它。
  • 除非你在.zshrc 的某处有一个类似export PATH_TO_BINARY 的命令(而这可能应该在.zprofile 中),你没有 一个环境变量名为PATH_TO_BINARY;你只有一个普通的 shell 变量,它不会被任何子进程看到,比如你的 Python 脚本。

标签: macos environment-variables zsh


【解决方案1】:

您似乎没有环境变量。听起来您在.zshrc 中有如下一行:

PATH_TO_BINARY=/Users/user/some_path

这不是环境变量;它只是一个普通的shell变量。要将其添加到环境中(以便将其传递到任何子进程的环境中),您需要使用export 命令。

将以下内容添加到您的.zprofile 文件(不是.zshrc):

export PATH_TO_BINARY=/Users/user/some_path

【讨论】:

  • 是的,你是对的。但我想知道为什么来自 shell 的 echo $PATH_TO_BINARY 仍然有效?
  • 因为变量是在shell中定义的;它只是没有作为 environment 变量导出。它们是两种不同的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多