您需要提供任何错误或警告消息的准确措辞
从 emacs 获取以确保准确或更好的答案。不过,我会做一个
猜测并假设您收到的警告来自 exec-path 包。
这个包有一个检查,你可以禁用它,看起来可以确保你
在正确的初始化文件中定义了变量。
一般来说,大多数shell都支持两种配置文件
- 启动或登录初始化文件
- 交互式 shell 初始化文件
不同之处在于获取(加载)文件的频率或时间。到
了解其中的区别,您确实需要了解 shell 何时运行以及
每个shell之间的关系。我会尝试给出不同的高水平
解释,但你真的应该阅读特定 shell 的手册页
您正在使用。
将您的环境想象成一棵 shell 进程树。当您登录到
系统,创建一个登录外壳。该外壳将是所有其他外壳的父级
您创建的贝壳。每次运行命令时,都会在新的 shell 中执行
(这不是 100% 准确,但足以准确解释主要
点)。因此,当您打开终端时,它会运行另一个 shell,它是
你的登录外壳。当你执行各种命令时,系统会创建一个新的
shell 并在 shell 中运行该命令。这些都是你的孩子
父登录外壳。有些外壳只存在很短的时间(只要
执行命令所需的时间),其他可能会持续数小时、数天或可能
周(例如运行 emacs 的 shell)。
要记住的重要一点是子 shell 继承了各种
来自父 shell 的设置。您将看到的“导出”命令的概念
一些变量的前面实际上是一个命令给 shell 告诉它导出
子壳的变量。例如,如果我们有这样一行
export PATH=/usr/local/bin:/usr/bin:/bin
我们真正在做的是
PATH=/usr/local/bin:/usr/bin:/bin # set the variable
export PATH # make it available in child shells
我们并不总是希望导出变量,因为某些变量需要重置
在子壳本身中。例如,保存提示字符串的变量。
仅在登录父 shell 中定义此变量是行不通的
如果您希望提示具有动态组件,例如当前
目录、日期或时间。我们希望在每个变量中定义这些类型的变量
创建时的 shell。
为了处理这个问题,shell 有两个不同的 init 文件。登录初始化文件
仅来自父外壳,对于设置特别有用
所有子 shell 共有的变量。每个外壳的初始化文件是
为每个新的 shell 提供资源,最适合用于设置需要的东西
每次启动 shell 时都会更新或更改。还有其他外壳
可用于其他特殊目的的配置文件,例如当
您注销或注销系统,或者只是将别名定义放入等中。
曾几何时,将变量放在那里会产生很大的不同
采购这些初始化文件时性能受到影响。如果 per-shell 初始化文件
太大,消耗太多资源,你的整体性能
环境可能会受到影响。这在很大程度上已不再是一个问题,因为
以提高处理速度。不幸的是,因为很多人没有
了解不同shell配置之间的作用和关系
文件中,有很多关于
应该在哪里设置值。人们经常建议在 (for
例如) bashrc 什么时候应该在 bash__profile=.混乱是
部分原因是您可以将变量添加到 bashrc 并且它会在以下情况下工作
您对其进行测试(通常是因为您的测试涉及分叉一个新的子外壳)和
将它放在您的 bash_profile 中只会在下次登录后起作用。
还有一些平台差异使事情变得更少
清除。比如在OSX下,/etc下其实有一个特殊的文件
您应该在其中添加其他路径组件的目录(我不在 Mac 上只是
现在,但它类似于 /etc/paths 或每个路径的组件文件
/etc/path.d)。这样做是为了让您有一个全局位置来设置路径
将确保桌面进程(例如扩展坞)不会作为子进程运行
你的登录shell的进程,可以设置。
作为一般规则,大多数变量都可以进入登录配置文件,其中
与提示相关的变量或其他具有
动态内容,即根据时间、目录变化的内容
特定于 shell 的交互动作的位置或其他跟踪
实例。
路径设置(注意如上所述的操作系统差异)应进入
配置文件或登录配置文件。在 bash 下,这是 .bash_profile 和
在 zsh 下,它通常是 .zprofile。由于 bash 已成为最常见的 shell,
文档等通常建议将内容添加到 .bash_profile。如果你的跑步
zsh,然后使用 .zprofile 添加相同的信息。
正如你所说,你没有.bash_profile,但你有一个 zshrc 文件,我
我假设您正在运行 zsh 而不是 bash 作为登录 shell。这个存在
在这种情况下,您需要将该路径设置添加到您家中的 .zprofile
目录。 exec-path 包抱怨,因为您将它添加到
zshrc/bashrc,这不是设置路径变量的正确位置。如果你的
在 OSX 下运行,您确实需要在 /etc 中添加正确文件的路径
(您需要查看 OSX 文档,因为我不记得确切的
文件名)。