在zsh中放置$ PATHvariables断言的地方在哪里?
我喜欢zsh
,但我不知道在哪里放置我的$PATH
和其他variables断言? 我发现它们分散在文件.zprofile
.bashrc
.bash_profile
,有时翻倍。
我知道在bash
文件中有什么东西没有什么意义,因为我正在使用zsh
,但是我应该把我的rvm
, python
, node
等添加到我的$PATH
?
有一个特定的文件,我应该使用(即.zshenv
目前不存在于我的安装),我正在使用的一个,或者它甚至重要?
tl; dr版本:使用~/.zshrc
,并阅读手册页以了解~/.zshenv
, ~/.zshenv
和~/.zprofile
。
关于我的评论
在我给kev回答的评论中,我说:
这似乎是不正确的 – 我可以find任何zsh文档中没有列出/ etc / profile。
这部分是不正确的: /etc/profile
可能来自zsh
。 但是 ,只有当zsh
被“作为sh
或ksh
调用”时才会发生这种情况。 在这些兼容模式下:
通常的zsh启动/closures脚本不会执行。 loginshell源码/ etc / profile,然后是$ HOME / .profile。 如果在调用时设置了ENV环境variables,$ ENV将在configuration文件脚本之后。 ENV的值在被解释为path名之前进行参数扩展,命令replace和算术扩展。 [ man zshall,“兼容性” ]。
ArchWiki ZSH链接说:
在login时,Zsh按以下顺序获取以下文件:
/ etc / profile文件
该文件在login时由所有与Bourne兼容的shell提供
这意味着/etc/profile
始终由zsh
在login时读取 – 我对Arch Linux项目没有任何经验; 维基可能是正确的分发,但它通常是不正确的。 这些信息与zsh手册页相比是不正确的,似乎并不适用于OS X上的zsh(在/etc/profile
设置的$PATH
不会对我的zsh会话产生影响)。
为了解决这个问题:
我到底应该把我的rvm,python,node等添加到我的$ PATH中?
一般来说,我会从~/.zshrc
.zshrc中导出我的$PATH
,但值得读一下zshall手册页,特别是“STARTUP / SHUTDOWN FILES”部分 – ~/.zshrc
被读取为交互式 shell,可能或可能不适合你的需求 – 如果你想为你调用的每一个zsh
shell(包括interactive
而不是,不pipe是否login
等)使用$PATH
,那么~/.zshenv
是一个更好的select。
有一个特定的文件,我应该使用(即.zshenv目前不存在于我的安装),我正在使用的一个,或者它甚至重要?
有一堆文件在启动时读取(检查链接的man
页),这是有原因的 – 每个文件都有特定的位置(每个用户的设置,用户特定的设置,loginshell的设置,每个shell的设置等等)。
不要担心~/.zshenv
不存在 – 如果你需要它,将它读取。
.bashrc
和.bash_profile
不能被zsh
读取,除非你明确的从~/.zshrc
或类似的地方获取它们。 bash
和zsh
之间的语法并不总是兼容的。 .bashrc
和.bash_profile
都是为bash
设置而devise的,而不是zsh
设置。
以下是来自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
你可以在这里获得更多的信息。
我有类似的问题(在bashterminal命令工作正常,但zsh显示命令未find错误)
解:
只要把你之前粘贴在〜/ .bashrc中的任何东西粘贴到:
~/.zshrc