跳到主要内容

.zshrc 与 .zprofile 的区别

~/.zprofile 和 ~/.zshrc 文件在 Zsh 配置中扮演不同的角色。这里是它们之间的主要区别:

  • ~/.zprofile:此文件仅在登录 shell(login shell)启动时执行,且在 ~/.zshrc 之前。它主要用于设置环境变量,例如 PATH,以及用于全局配置的其他变量。注意:远程登录(如 SSH)通常本身就是交互式登录 shell,也会读取此文件;而真正的非交互式 shell(如执行脚本 zsh script.sh)默认不会读取它。

  • ~/.zshrc:此文件在交互式 shell(无论登录还是非登录)启动时执行。它主要用于定义交互式 shell 的设置,例如命令别名、shell 选项和提示符自定义。当你打开一个新的终端窗口或标签时,这些设置会生效。通常,建议将与交互式会话相关的设置(如命令别名)放在 ~/.zshrc 中。

简而言之:~/.zprofile 用于登录 shell 的环境变量设置,而 ~/.zshrc 用于交互式 shell 的设置。建议将与交互式会话相关的设置(如命令别名)放在 ~/.zshrc 中,以确保它们仅在交互式会话中生效。

Zsh 启动文件的完整加载顺序

Zsh 实际读取启动文件的顺序如下:

文件何时读取
~/.zshenv每次调用都读(登录/非登录/交互/脚本)—— 想在所有场景生效的环境变量应放这里
~/.zprofile登录 shell
~/.zshrc交互式 shell(登录或非登录)
~/.zlogin仅登录 shell(在 ~/.zshrc 之后)
~/.zlogout登录 shell 退出时

macOS 特别注意:Terminal.app 和 iTerm2 默认每个新窗口和标签页都是登录 shell-l),因此 ~/.zprofile 和 ~/.zshrc 都会被读取。这也是为什么在 Mac 上把 PATH 放在哪个文件里"看起来都能用"。但要让变量在所有场景(包括脚本等非交互式 shell)都生效,最稳妥的位置是 ~/.zshenv。

要在 Zsh 中将 ll 设置为 ls -la 的别名,你需要在你的 Zsh 配置文件(通常是 ~/.zshrc)中添加以下行:

alias ll='ls -la'

然后,保存文件并重新加载配置文件,以使更改生效。你可以通过运行以下命令重新加载配置文件:

source ~/.zshrc