配置你的zsh与bash

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我们主要关心的配置文件有 zshenvzprofile zshrc zloginzlogout

位置

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这个配置文件。

注意:

  1. su切换成root用户(su root)显然也是non-login shell,读取不到etc/profile,而作为root用户只读取到~/.bashrc显然是不行的,所以需要使用su -来进行切换,此时重新读取etc/profile(系统级)。
  2. 而切换其他用户的时候,我们一般直接su 用户名,这也是不对的,切换到一般用户我们需要用su -l 用户名才能读取到~/.bash_profile(个人级)。

    即:
  3. etc/profile:所有用户都能读取(通常不改动它)。
  4. .bash_profile:只能被登录用户读取。
  5. .bashrc:只能被非登录用户读取。
  6. ~/.zshrc:无论登录和非登录用户都可以读取。

经过以上分析可知我们正常情况下使用iTerm2或者Terminal时使用的都是login shell
所以mac一般使用的配置文件为~/.bash_profile,自己折腾通常也不会设置多用户切换着玩。

总结

  1. 有以上分析可以了解,使用Mac原始的bash时主要需要关心的配置文件是~/.bash_profile,而切换成zsh时主要需要关心的配置文件为~/.zshrc
    安装zsh后发现很多命令不能用了可以在~/.zshrc文件中添加source ~/.bash_profile使加载~/.zshrc时同时加载~/.bash_profile
  2. 配置文件的主要作用就是加载环境变量,有时候像搭载JIRA环境时需要用到不同版本的JDK,此时就可以安装多个JDK而后通过修改配置文件来实现切换。

附:各种常见的shell

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

参考的文章:大佬


   转载规则


《配置你的zsh与bash》 火花 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录