跳转至

第五章:文件

启动 / 退出文件

命令会首先从 /etc/zshenv 读取,这一点不可以被覆盖。随后的行为会被选项 RCSGLOBAL_RCS 修改;前者影响所有启动文件,后者只影响全局启动文件(即此处所述文件中以 / 开头的文件)。若任意时刻取消设定其中一个选项,任何对应类型的启动文件随后都不会被读取。$ZDOTDIR 中的一个文件重新启用 $GLOBAL_RCS 亦可。RCSGLOBAL_RCS 默认都被设定。

随后命令会从 $ZDOTDIR/.zshenv 读取,若 Shell 是登录 Shell,命令会先后从 /etc/zprofile$ZDOTDIR/.zprofile 读取。然后若 Shell 是交互的,命令会先后从 /etc/zshrc$ZDOTDIR/.zshrc 读取。最后如果 Shell 是登录 Shell,读取 /etc/zlogin$ZDOTDIR/.zlogin

登录 Shell 退出的时候,会读取 $ZDOTDIR/.zlogout/etc/zlogout。这会在通过 exitlogout 命令显式退出或者终端读取文件末尾标识符的隐式退出。然而若 Shell 因 exec 到其他程序退出,将不会读取登出文件。这也会受选项 RCSGLOBAL_RCS 的影响。注意 RCS 选项影响历史文件的保存,即若 Shell 退出时未设定 RCS,就不会保存历史文件。

ZDOTDIR 未设定,会使用 HOME 代替。取决于安装,上述位于 /etc 的文件也可能在另一目录。

由于 /etc/zshenv 会被所有 Zsh 实例运行,保持它尽可能小很重要,把不需要每个 Shell 都运行的代码置于形如 if [[ -o rcs ]]; then ... 的测试代码后也是好主意,这样 Zsh 带 -f 选项启动时就不会执行它们。

文件列表

$ZDOTDIR/.zshenv
$ZDOTDIR/.zprofile
$ZDOTDIR/.zshrc
$ZDOTDIR/.zlogin
$ZDOTDIR/.zlogout
${TMPPREFIX}* (默认 /tmp/zsh*)
/etc/zshenv
/etc/zprofile
/etc/zshrc
/etc/zlogin
/etc/zlogout(取决于安装 - 默认 /etc/

上述任何文件都可以用内置命令 zcompile 预编译(详见 -> Shell 内建命令)。若存在编译文件(以原文件名加 .zwc 扩展名形式命名)且比原文件新,会使用编译文件。


最后更新: 2022-08-05 09:07:03