zsh的环境变量的加载.zprofile .zlogin .zshrc .zshenv

上一级页面:配置oh-my-zsh

全局配置文件

zsh的默认全局配置路径,在不同发行版上有所区别,这里以使用最广的配置为例。(部分发行版需要自行百度配置路径)

1
sudo vim /etc/zsh/zshenv

具体来说,这个路径可以通过命令查看zsh的自带手册

1
man zsh

如图所示位置

Pasted%20image%2020221104082029.png

设置ZDOTDIR

可以查看WIKI:Zsh (简体中文) - ArchWiki (archlinux.org)

1
sudo vim /etc/zsh/zshenv

设置$ZDOTDIR

1
2
# 我在这个文件夹($HOME/.zsh/wsl2)中储存 .zshenv .zshrc .zprofile等
ZDOTDIR=/opt/zsh-conf/wsl2/ubuntu

激活配置文件

1
zsh

从云端下载自己的配置文件

从云端下载自己的配置文件

1
cd ~/src
1
git clone git@github.com:YJ2CS/oh-my-conf.git zsh-conf
1
sudo mv zsh-conf /opt

查看ZDOTDIR

1
la $ZDOTDIR

Pasted%20image%2020220627200645.png

zsh的配置文件详解

zsh的全局配置文件在$ZDOTDIR,可以查看WIKI:Zsh (简体中文) - ArchWiki (archlinux.org)

1
ll $ZDOTDIR

有必要把zsh的环境变量配置说一下,

当 Zsh 启动时,它会按照顺序依次读取下面的配置文件:

$ZDOTDIR/zshenv

该文件应该包含用来设置PATH 环境变量以及其他一些环境变量的命令;不应该包含那些可以产生输出结果或者假设终端已经附着到 tty 上的命令。

对于$PATH$EDITOR等变量,应当按照规范,写在$ZDOTDIR/.zshenv

  • 举例:对于wsl2 的x client端配置,因为是所有用户都要应用的,并且需要在nologin状态下起效的(不只应用在shell),应当按照规范,写在$ZDOTDIR/zshenv

~/.zshenv

该文件和 $ZDOTDIR/zshenv 相似,但是它是针对每个用户而言的。一般来说是用来设置一些有用的环境变量。

$ZDOTDIR/zprofile

这是一个全局的配置文件,在用户登录的时候加载。一般是用来在登录的时候执行一些命令。

请注意,在 Arch Linux 里该文件默认包含一行命令,用来加载 /etc/profile 文件

1
sudo vim $ZDOTDIR/.zprofile
1
emulate sh -c 'source /etc/profile'

这只是为了兼容已有的旧的配置文件,新的对应配置,应当写在$ZDOTDIR/zprofile

/etc/profile

在登录时,该文件应该被所有和伯克利(Bourne)终端相兼容的终端加载:它在登录的的时候会加载应用相关的配置(/etc/profile.d/*.sh)。

注意在 Arch Linux 里,Zsh 会默认加载该文件。而在其他发行版中,则需要手动更改$ZDOTDIR/zprofile,添加一句emulate sh -c 'source /etc/profile'

~/.zprofile

该文件一般用来在登录的时候自动执行一些用户脚本。

$ZDOTDIR/zshrc

当 Zsh 被作为交互式终端的时候,会加载这样一个全局配置文件。

当前用户要应用的,并且运行在交互式终端(shell)下,应当写在$ZDOTDIR/.zshrc

~/.zshrc

当 Zsh 被作为交互式终端的时候,会加载这样一个用户配置文件。

只对当前用户应用的,并且运行在交互式终端(shell)下,应当写在~/.zshrc

$ZDOTDIR/zlogin

在登录完毕后加载的一个全局配置文件。

$ZDOTDIR/.zlogin是在当前用户登录完毕后加载的一个全局配置文件。

  • 注意,登录并不一定要运行在交互式终端(shell)下,很多场景下会直接启动GUI界面,而不加载shell

~/.zlogin

和 $ZDOTDIR/zlogin 相似,但是它是针对每个用户而言的。

$ZDOTDIR/zlogout

在注销的时候被加载的一个全局配置文件。

~/.zlogout

和 $ZDOTDIR/zlogout 相似,但是它是针对每个用户而言的.

  • 在 Arch 源中的 zsh 所使用的文件路径和 Zsh 的 man 手册中默认的不同(详见 #全局配置文件
  • /etc/profile 不是 Zsh 常规启动配置文件的一部分,但是 Arch 源中的 zsh 会在 $ZDOTDIR/zprofile 里面加载它。用户应该注意 /etc/profile 里面设置的 $PATH 环境变量会覆盖掉 ~/.zshenv 里面配置的任何 $PATH,为防止这一点,请不要在 /etc/profile中设置用户的环境变量。

参考

What should/shouldn’t go in .zshenv, .zshrc, .zlogin, .zprofile, .zlogout?

zsh的环境变量的加载.zprofile .zlogin .zshrc .zshenv – Vincent Blog (xsudo.com)