h下的用户环境配置文件很多`.zlogin` `.zprofile` `.zshrc` `.zshenv` `.zlogout`,这些文件究竟如何分配我们需要设置的环境变量呢
zsh下的用户环境配置文件很多.zlogin
.zprofile
.zshrc
.zshenv
.zlogout
, 我们在安装语言框架或者软件包的时候通常会要求写入一些环境变量信息到配置文件里,所以有时候就按照手册上的来,没有去做进一步研究为什么要放这里.时间长了就会发现这些配置文件乱七八糟,甚至有的还有冲突,比如有的虚拟系统和本地系统会出现问题.
一个例子就是python
,Mac
系统自带的有python2
,你可能会手动编译一个到/usr/local
, 又过段时间你用上了Homebrew
, 于是自己又brew install
了一个新的python3
,后来你发现乱了,于是安装了pyenv
和pyenv-virtualenv
插件,几番折腾下来,系统里的本地的,系统,编译的,虚拟的,python2
的python3
的一大堆python,你都不知道你怎么才能运行你要的python版本和环境.这时候有个Pycharm
这样的IDE还行,你可以去指定要运行的bin,如下图:
但是在shell里运行的时候依然会乱套.所以有必要把zsh的环境变量配置说一下,大体上主要有下面几个:
.zlogin
.zshrc
.zprofile
.zshenv
.zlogout
.zshenv
.zshenv
总是被读取,所以通常把$PATH
, $EDITOR
等变量写在这里,这样无论是在shell交互,或者运行程序都会读取此文件
.zshrc
.zshrc
主要用在交互shell,所以主要是为shell服务的,比如对shell做的一些个性化设置都可以在这里写入
.zlogin
.zlogin
在login shell的时候读取,所以比如X系统启动的时候会读取此文件,所以不会再运行中重复读取
.zprofile
.zprofile
是给ksh
用户的一个.zlogin
的替代品,所以我们如果使用了.zlogin
就不必再关心此文件
.zlogout
.zlogout
这个就很好理解了, 退出终端的时候读取,用于做一些清理工作,一般我们也用不上
顺序
那么,这些文件有没有读取的优先级顺序呢,是有的
.zshenv → [.zprofile if login] → [.zshrc if interactive] → [.zlogin if login] → [.zlogout sometimes].
参考 What should/shouldn't go in .zshenv, .zshrc, .zlogin, .zprofile, .zlogout?