![我无法在 zsh 上设置 env 变量](https://linux22.com/image/196810/%E6%88%91%E6%97%A0%E6%B3%95%E5%9C%A8%20zsh%20%E4%B8%8A%E8%AE%BE%E7%BD%AE%20env%20%E5%8F%98%E9%87%8F.png)
我使用的是Kali Linux:
lsb_release -a
"
Distributor ID: Kali
Description: Kali GNU/Linux Rolling
Release: 2021.2
Codename: kali-rolling
"
我设置了环境变量
export DB_USER=something
它可以工作,但是当我关闭选项卡时,它不再识别。我正在为我的 Django 项目设置 env 变量。当我在“pycharm”终端上设置时,它会设置它。
printenv DB_USER
但是当我关闭pyhcarm时,printenv DB_USER
没有显示任何值。
我使用其中一个选项卡在终端上设置它。同样,它设置了它,但是当我关闭该特定终端时,它不再识别该 env 值。
当我检查 zshenv 文件时:
nano /etc/zsh/zshenv
我这个文件里有这个
if [[ -z "$PATH" || "$PATH" == "/bin:/usr/bin" ]]
then
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"
fi
唯一的环境变量 zsh 有 PATH。但是当我运行env
命令时,我看到一个很大的环境变量列表,但它们不在“zshenv”中。
答案1
每个终端,无论是系统终端、Pycharm 终端还是其他终端,都是不同的 shell 会话和不同的环境。你在其中一个中设置的内容不会在另一个中存在。
如果您希望它可以跨会话使用,那么您需要编辑文件/etc/zsh/zprofile
、etc/zsh/profile
或/etc/zsh/zshenv
添加export DB_USER=something
。这将在登录时获取它,zsh
这是您正在使用的 shell。根据您正在执行的操作,最好使用后一个 init 脚本,以便它可以作为任何 shell init 的来源。
答案2
当您按照现有方式设置环境变量时,您只是为特定会话设置它。要在所有终端会话中设置它们,在您的情况下,您应该将以下行附加到位于您的主目录中的 .zshrc 中(或者/root
如果您希望将其用于 root 帐户):
export DB_USER=something
对于问题的第二部分,路径变量在所有会话中都是通用的,但是您在运行命令时看到的环境变量列表env
都是在终端会话开始时初始化的,例如,$USER
引用用户运行的变量$PWD
引用当前工作目录的会话或变量。正如您可以推断的,这些变量是特定于每个实例的,因此是为各个会话定义的,这与所有实例通用的路径变量不同。