文件:bash_profile zhrc混乱

时间:2017-03-09 19:59:07

标签: emacs terminal path

我不确定这对我来说是否清楚,以及我的系统是否整洁。我知道〜/ .zhrc文件,我可以存储别名和路径,但是今天通过brew安装节点之后我被要求输入:export PATH =" $ HOME / .npm-packages /斌:$ PATH"在我的〜/ .bash_profile文件中,它不存在,因此在我保持系统清洁的过程中,我把它放在以前的文件中,但是emacs投诉。现在,我在〜/ .bash_profile中创建后删除了它并将其删除。可以将它们保存在主目录中吗?

1 个答案:

答案 0 :(得分:0)

您需要提供任何错误或警告信息的准确措辞 从emacs获取以确保准确或更好的答案。但是,我会做一个 猜测并假设你得到的警告来自exec-path包。

此软件包有一个可以禁用的检查,以确保您 在正确的init文件中定义变量。

通常,大多数shell支持两种类型的配置文件

  • 启动或登录初始化文件
  • 交互式shell初始化文件

不同之处在于文件来源(加载)的频率或时间。至 了解差异,你真的需要了解shell何时运行 每个shell之间的关系。我会尝试给出不同的高水平 解释,但你真的应该阅读特定shell的手册页 您正在使用。

将您的环境视为shell进程树。当你登录到 系统,创建登录shell。这个shell将是所有其他shell的父级 你创造的贝壳。每次运行命令时,都会在新shell中执行 (这不是100%准确,但准确到足以说明主要内容 点)。所以当你打开一个终端时,它运行另一个shell,它是一个孩子 你的登录shell。执行各种命令时,系统会创建一个新命令 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创建时。

为了解决这个问题,shell有两个不同的init文件。登录init文件 仅用于父shell,对设置特别有用 所有子shell共有的变量。每个shell的init文件是 源自每个新shell,最适合用于设置需要的东西 每次启动shell时都要更新或更改。还有其他的外壳 配置文件可用于其他特殊用途,例如何时 您注销或注销系统,或只是将别名定义放在等等。

曾几何时,将变量放在那里会产生很大的不同 在采购这些初始化文件时,性能受到了打击。如果是per-shell init文件 太大了,消耗了太多的资源,整个你的表现 环境可能会受到影响。这在很大程度上不是一个问题 提高处理速度。不幸的是,因为很多人都没有 了解不同shell配置之间的角色和关系 文件,有很多不正确或误导性的信息 应该设置值。人们经常建议设置变量(for 例子)bashrc什么时候应该在bash__profile =中设置。困惑是 部分原因是你可以向bashrc添加一个变量,它会在什么时候起作用 你测试它(通常是因为你的测试涉及分支新的子shell)和 将它放在你的bash_profile中只会在下次登录后才能使用。

还有一些平台差异使事情变得更少 明确。例如,在OSX下,/ etc中实际上有一个特殊文件 你应该添加其他路径组件的目录(我不在mac上。) 现在,但它类似于/ etc / paths或每个路径组件文件 /etc/path.d)。这样做是为了让你有一个全局的位置来设置路径 将确保不作为孩子运行的桌面进程,例如dock 您可以设置登录shell的进程。

作为一般规则,大多数变量都可以在登录配置文件中使用 与提示或其他变量有关的变量的例外 动态内容,即根据时间,目录而改变的内容 位置或其他跟踪特定于shell的交互式操作 实例。

应该进入路径的设置(注意如上所述的OS差异) 配置文件或登录配置文件。在bash下,这是.bash_profile和 在zsh下,它通常是.zprofile。由于bash已成为最常见的shell, 文档等经常建议添加到.bash_profile的东西。如果你跑 zsh,然后使用.zprofile添加相同的信息。

正如你所说的,你没有a.bash_profile,但你确实有一个zshrc文件,我 我假设您正在运行zsh而不是bash作为您的登录shell。这是 在这种情况下,您需要将该路径设置添加到您家中的.zprofile 目录。 exec-path包是抱怨的,因为你把它添加到了 zshrc / bashrc,它们不是设置路径变量的正确位置。如果你的 在OSX下运行,你真的需要在/ etc中添加正确文件的路径 (你需要检查OSX文档,因为我记不清楚了 文件名)。