我喜欢zsh
,但我不确定在哪里放置$PATH
和其他变量断言?我发现它们分散在文件.zshrc
.zprofile
.bashrc
.bash_profile
之间,有时会翻倍。
我意识到在bash
文件中包含任何内容并没有多大意义,因为我正在使用zsh
,但我应该在哪里放置rvm
,python
,node
等添加到我的$PATH
?
是否有我应该使用的特定文件(即.zshenv
我的安装中当前存在不),我目前正在使用的文件之一,或者甚至是重要的?
答案 0 :(得分:118)
tl; dr版本:使用~/.zshrc
并read the man page了解之间的差异:
~/.zshrc
,~/.zshenv
和~/.zprofile
。
在我对答案kev gave的评论中,我说:
这似乎不正确 - / etc / profile未在我能找到的任何zsh文档中列出。
结果证明部分不正确:/etc/profile
可能来自zsh
。 但,只有在zsh
被“sh
或ksh
”调用时才会出现这种情况。在这些兼容模式中:
不执行通常的zsh启动/关闭脚本。登录shell源/ etc / profile后跟$ HOME / .profile。如果在调用时设置ENV环境变量,则在概要文件脚本之后获取$ ENV。 ENV的值在被解释为路径名之前经过参数扩展,命令替换和算术扩展。 [man zshall, "Compatibility"]。
登录时,Zsh按此顺序提供以下文件:
/ etc / profile文件
此文件由登录时所有与Bourne兼容的shell提供
这意味着/etc/profile
总是在zsh
在登录时读取 - 我对Arch Linux项目没有任何经验; wiki对于该分发可能是正确的,但不通常是正确的。与zsh手册页相比, 信息不正确,并且似乎不适用于OS X上的zsh($PATH
中设置的/etc/profile
中的路径不适用于我的zsh会议)。
我应该把我的rvm,python,node等添加到我的$ PATH中吗?
通常情况下,我会从$PATH
导出~/.zshrc
,但值得阅读zshall手册页,特别是“STARTUP / SHUTDOWN FILES”部分 - {{1对于交互式 shell,可能会或可能不符合您的需求 - 如果您希望~/.zshrc
为您调用的每个$PATH
shell(zsh
而不是,interactive
和不是,等等,那么login
是一个更好的选择。
是否有我应该使用的特定文件(即我的安装中当前不存在的.zshenv),我目前正在使用的文件之一,或者甚至是否重要?
在启动时读取了一堆文件(检查链接的~/.zshenv
页面),这是有原因的 - 每个文件都有它的特定位置(每个用户的设置,用户特定的设置,设置)登录shell,每个shell的设置等)
不要担心man
不存在 - 如果你需要它,制作它,它将被阅读。
~/.zshenv
和.bashrc
不由.bash_profile
读取,除非您明确地从zsh
或类似地提取它们; ~/.zshrc
和bash
之间的语法不始终兼容。 zsh
和.bashrc
都设计用于.bash_profile
设置,而不是bash
设置。
答案 1 :(得分:26)
这是来自STARTUP / SHUTDOWN FILES部分下zsh手册页的文档。
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 an 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 possi-
ble 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/.zpro-
file. 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.
从这里我们可以看到订单文件是:
/etc/zshenv # Read for every shell
~/.zshenv # Read for every shell except ones started with -f
/etc/zprofile # Global config for login shells, read before zshrc
~/.zprofile # User config for login shells
/etc/zshrc # Global config for interactive shells
~/.zshrc # User config for interactive shells
/etc/zlogin # Global config for login shells, read after zshrc
~/.zlogin # User config for login shells
~/.zlogout # User config for login shells, read upon logout
/etc/zlogout # Global config for login shells, read after user logout file
您可以获得更多信息here。
答案 2 :(得分:13)
我有类似的问题(在bash终端命令工作正常,但zsh显示命令未找到错误)
只需将之前粘贴在〜/ .bashrc中的内容粘贴到:
~/.zshrc