5 Files (zsh)

# 5 Files ¶

## 5.1 Startup/Shutdown Files ¶

Commands are first read from `/etc/zshenv`; this cannot be overridden. Subsequent behaviour is modified by the `RCS` and `GLOBAL_RCS` options; the former affects all startup files, while the second only affects global startup files (those shown here with a path starting with a `/`). If one of the options is unset at any point, any subsequent startup file(s) of the corresponding type will not be read. It is also possible for a file in `$ZDOTDIR` to re-enable `GLOBAL_RCS`. Both `RCS` and `GLOBAL_RCS` are set by default.

Commands are then read from `$ZDOTDIR/.zshenv`. If the shell is a login shell, commands are read from `/etc/zprofile` and then `$ZDOTDIR/.zprofile`. Then, if the shell is interactive, commands are read from `/etc/zshrc` and then `$ZDOTDIR/.zshrc`. Finally, if the shell is a login shell, `/etc/zlogin` and `$ZDOTDIR/.zlogin` are read.

When a login shell exits, the files `$ZDOTDIR/.zlogout` and then `/etc/zlogout` are read. This happens with either an explicit exit via the `exit` or `logout` commands, or an implicit exit by reading end-of-file from the terminal. However, if the shell terminates due to `exec`’ing another process, the logout files are not read. These are also affected by the `RCS` and `GLOBAL_RCS` options. Note also that the `RCS` option affects the saving of history files, i.e. if `RCS` is unset when the shell exits, no history file will be saved.

If `ZDOTDIR` is unset, `HOME` is used instead. Files listed above as being in `/etc` may be in another directory, depending on the installation.

As `/etc/zshenv` is run for all instances of zsh, it is important that it be kept as small as possible. In particular, it is a good idea to put code that does not need to be run for every single shell behind a test of the form ‘`if [[ -o rcs ]]; then ...`’ so that it will not be executed when zsh is invoked with the ‘`-f`’ option.

## 5.2 Files ¶

`$ZDOTDIR/.zshenv`
`$ZDOTDIR/.zprofile`
`$ZDOTDIR/.zshrc`
`$ZDOTDIR/.zlogin`
`$ZDOTDIR/.zlogout`
`${TMPPREFIX}*` (default is /tmp/zsh*)
`/etc/zshenv`
`/etc/zprofile`
`/etc/zshrc`
`/etc/zlogin`
`/etc/zlogout` (installation-specific - `/etc` is the default)

Any of these files may be pre-compiled with the `zcompile` builtin command (Shell Builtin Commands). If a compiled file exists (named for the original file plus the `.zwc` extension) and it is newer than the original file, the compiled file will be used instead.

This document was generated on May 31, 2026 using texi2any.

Zsh version 5.9.1, released on May 31, 2026.