zsh 概览

前言

从几年前开始用 archlinux 时就在用 zsh 作为默认的 shell (因为 zsharchlinux 的安装镜像中默认的 shell), 但是因为一直都是用的 oh-my-zsh, 这就 类似于 Ubuntulinux/的很多细节隐藏了一样, /oh-my-zsh 也把很多 zsh 的细 节隐藏了. 这几天刚好有点时间, 就把 zsh 的文档 1看了一下, 这里也算是 做个记录吧.

zsh 的历史

保罗·弗斯塔德 (Paul Falstad) 在 1990 于普林斯顿大学求学期间编写了 zsh 的初版, 当时只是为了增强 Bourne Shell 的性能写的一个项目, 这两者之间的关系比较类似与 VIMVI 的关系. 在看到了普林斯顿教授邵中的登录名 zsh 之后, 保罗就自作主 张的把自己写的 shell 的命名为 zsh.

zsh 的配置文件

如果把 zsh 设为默认的 shell, 那么在开机到登陆完成为止, 配置文件的加载顺序为 /etc/zshenv (注之后的行为会根据 RCSGLOBAL_RCS 的不 同而不同, 具体会在 下一小节讲解), $ZDOTDIR/.zshenv, /etc/zprofile, $ZDOTDIR/.zprofile, /etc/zlogin (这里以及之后的文件都是在登陆密码用户名校验完成之后才记载的), $ZDOTDIR/.zlogin. 其中, 如果 $ZDOTDIR 没有设置的话, 默认使用 $HOME 的值.

在登陆之后, 如果打开一个 terminal 的话, 那么配置文件的加载顺序为, /etc/zshenv, $ZDOTDIR/.zshenv, /etc/zshrc, $ZDOTDIR/.zshrc. 这里我们可以 看到, zshenv 这是一个非常的重要的文件, 应该尽可能的保持精简, 并且如果是需要全 局配置的一些环境变量的话, 最好写在其中. 此外值得一提的是, 在推出登陆的时候, 会加 载 /etc/zlogout, $ZDOTDIR/.zlogout.

Options of zsh

这里插一句题外话, 因为实在不知道 options 应该怎么翻译, 这里先暂且统一称为配置吧. 存在一些配置可以让用户对 zsh 定制化(customization), zsh 对于这些配置的大小 写不敏感, 并且会无视变量中的下划线, 比如 allexportA__lleXP_ort 对于 zsh 来说是一样的. 配置可以写在上一节所提到的配置文件的任意位置, 举个例子, 在 zsh 中, 默认是开启 auto_cd 的也就是说, 在 zshinteractive shell 里面, 直接输入文件夹的路径 就可以进入该文件夹, 那么该如何关闭这一行为呢, 很简单, 在 .zshrc 文件的末尾加上 unsetopt autocd (这里可以在其他任何合法的配置文件中输入, 之所以是最后一行, 是 因为如果使用了 oh-my-zsh 的话, 在 source $ZSH/oh-my-zsh.sh 这一行之前添加的 话有可能会导致配置失效.) 另, 具体的配置条目可以看官方的文档.

zsh 的内置命令

zsh 提供了很多有用的内置命令 2(build-in commands), 很多内置命令都实现了 POSIX Programmer’ Manual 里面的一些功能, 但是 又多多少少有点出入. 举个例子, 在 POSIX Programmer’s Manual 里面, 对于 cd 的 使用方法是这样描述的.

cd [−L|−P] [directory] cd −

但是在 zsh 当中却可以这样调用 cd -2 甚至这样调用 cd 2, 这个原因在于 zsh 内置的 cd 命令可以对目录栈做更多的操作. cd -2cd 2 的行为是一致的就是进 入在目录栈上的第三个元素所对应的目录.


  1. http://zsh.sourceforge.net/Doc/Release/index.html#Top ↩︎

  2. http://zsh.sourceforge.net/Doc/Release/Shell-Builtin-Commands.html#Shell-Builtin-Commands ↩︎