zsh配置文件
zsh是Bourne Shell(sh)的一个变种。Mac OS X 10.3之后默认的是Bourne Shell(bash/sh/zsh),之前为C Shell(csh/tcsh),通过zsh配合oh-my-zsh可以实现非常惊艳的效果。
zsh又被称为终极shell,可见其强大之处。
附上我美化后的终端:
想了解美化的具体过程可参考iTerm2终端美化
对于zsh我们主要关心的配置文件有
zshenv,zprofile,zshrc,zlogin,zlogout。
位置
zsh的五个配置文件分两份存储,即用户根目录home下的隐藏形式~/.XXXX和linux根目录下的非隐藏形式/etc/XXXX。/etc里的是全局的,对所有用户起作用。用户家目录中的只对当前用户有效果。
MAC OS 可通过
shift + command + .来显示隐藏文件(.XXXX)。

而通过实际的查看我们发现,我的目录中只有 zshrc 一个文件,也就是说此时只加载zshrc 。
加载顺序
配置文件的位置我们知道了,那么如何确定他们的加载顺序呢,我们只需要在用户根目录home下的五个配置文件(没有的话自行创建)中分别加入一句话:
echo '.XXXX' >> /Users/YYYY/Desktop/1
将信息打印输出到桌面的 ’ 1 ‘文件中。
其中:XXXX是配置文件的名称,YYYY为用户名。
结果如下:
由此可得加载顺序为:.zshenv → .zprofile → .zshrc → .zlogin → .zlogout 。
作用
以下引用自网络。
- .zshenv总是被读取,所以通常把$PATH, $EDITOR等变量写在这里,这样无论是在shell交互,或者运行程序都会读取此文件。
- .zshrc主要用在交互shell,所以主要是为shell服务的,比如对shell做的一些个性化设置都可以在这里写入。
- .zlogin在login shell的时候读取,所以比如X系统启动的时候会读取此文件,所以不会再运行中重复读取。
- .zprofile是给ksh用户的一个.zlogin的替代品,所以我们如果使用了.zlogin就不必再关心此文件。
- .zlogout退出终端的时候读取,用于做一些清理工作,一般用不上。
所以我们使用iterm2一般只需要关心.zshrc即可。.zshrc也是我们最常用到的配置文件,既可以被登陆shell读取,也可以被非登陆shell读取。
对配置文件
.zshrc修改完应执行source ~/.zshrc使修改生效。同时如果之前使用bash时使用的配置文件想要在zsh中也被加载生效,可以在.zshrc中添加source ~/.bash_profile。否则每次打开zsh需要手动source ~/.bash_profile。
bash配置文件
Mac OS X 10.3之后默认的shell 本质为Bourne Shell(sh)。自带的bash并不美观(
花里胡哨),以下作为了解。

终端输入chsh -s /bin/bash来切换成bash,重启终端生效。
运行模式
bash这块复杂的多。
shell有常见的两种运行模式即login shell(登陆shell)和non-login shell(非登陆shell)。
定义如下:
login shell:在取得bash时需要完整的登陆流程。什么时候取得bash呢?当然就是用户登陆的时候。需要输入账号和密码,此时取得的bash就是login shell。non-login shell:就是取得bash不需要重复登录。例如shell窗口直接su切换用户。
本质上的区别是读取的配置文件不同:
login shell:读取全局配置etc/profile与用户配置~/.bash_profile或~/.bash_login或~/.profile中的一个。其中三选一按照:
~/.bash_profile——>~/.bash_login——>~/.profile的顺序读取,三个文件不同用户都有自己的一份。non-login shell:只能读取~/.bashrc这个配置文件。
注意:
- su切换成root用户(
su root)显然也是non-login shell,读取不到etc/profile,而作为root用户只读取到~/.bashrc显然是不行的,所以需要使用su -来进行切换,此时重新读取etc/profile(系统级)。 - 而切换其他用户的时候,我们一般直接
su 用户名,这也是不对的,切换到一般用户我们需要用su -l 用户名才能读取到~/.bash_profile(个人级)。
即: - etc/profile:所有用户都能读取(通常不改动它)。
- .bash_profile:只能被登录用户读取。
- .bashrc:只能被非登录用户读取。
- ~/.zshrc:无论登录和非登录用户都可以读取。
经过以上分析可知我们正常情况下使用iTerm2或者Terminal时使用的都是login shell
所以mac一般使用的配置文件为~/.bash_profile,自己折腾通常也不会设置多用户切换着玩。
总结
- 有以上分析可以了解,使用Mac原始的bash时主要需要关心的配置文件是
~/.bash_profile,而切换成zsh时主要需要关心的配置文件为~/.zshrc。
安装zsh后发现很多命令不能用了可以在~/.zshrc文件中添加source ~/.bash_profile使加载~/.zshrc时同时加载~/.bash_profile。 - 配置文件的主要作用就是加载环境变量,有时候像搭载JIRA环境时需要用到不同版本的JDK,此时就可以安装多个JDK而后通过修改配置文件来实现切换。

附:各种常见的shell
- Bourne Shell是AT&T Bell实验室的 Steven Bourne为AT&T的Unix开发的,它是Unix的默认Shell,也是其它Shell的开发基础。Bourne Shell在编程方面相当优秀,但在处理与用户的交互方面不如其它几种Shell。
- C Shell是加州伯克利大学的Bill Joy为BSD Unix开发的,与sh不同,它的语法与C语言很相似。它提供了Bourne Shell所不能处理的用户交互特征,如命令补全、命令别名、历史命令替换等。但是,C Shell与BourneShell并不兼容。
- Korn Shell是AT&T Bell实验室的David Korn开发的,它集合了C Shell和Bourne Shell的优点,并且与Bourne Shell向下完全兼容。Korn Shell的效率很高,其命令交互界面和编程交互界面都很好。
- Bourne Again Shell (即bash)是自由软件基金会(GNU)开发的一个Shell,它是Linux系统中一个默认的Shell。Bash不但与Bourne Shell兼容,还继承了C Shell、Korn Shell等优点。
参考的文章:大佬