如果是在 Mac 或 Ubuntu 上,有时我们必须添加路径PATH
:
# add the following to ~/.profile
export PATH=~/.npm-global/bin:$PATH
然而,我们必须继续使用
source ~/.profile
如果我们不重新启动机器,就会在任何新的 Bash 窗口中出现。我们可以将该PATH
行放入 中.bashrc
,但据说我们应该只将该PATH
设置放入.profile
:https://superuser.com/questions/183870/difference- Between-bashrc-and-bash-profile
所以这里有点进退两难:如果我们不重新启动,我们就无法在所有 Bash shell 中拥有该路径。但由于我们的机器上运行着许多应用程序,我们可能无法重新启动,并且重新启动和重试也很耗时。
有没有办法进行更改,将其放在我们所有的 Bash shell 中,但不需要重新启动计算机?
答案1
如果文件不存在,则 shell~/.profile
会读取您的文件,并且 shell 是登录 shell。交互式非登录shell在启动时读取。bash
~/.bash_profile
bash
~/.bashrc
通常使用 let ~/.bash_profile
(或~/.profile
) source ,特别是在唯一活跃使用的 shell~/.bashrc
的系统上(具有,它也被一些非 shell 读取,如果许多不同的 shell 正在活跃使用, read可能会导致问题)。bash
~/.profile
bash
~/.bashrc
为了避免在已经运行的会话中获取任何这些文件bash
,只需将一个元素添加到变量的值中PATH
,您可以直接在 shell 的命令行上运行赋值:
PATH=$HOME/.npm-global/bin:$PATH
(请注意,export
这里的 using 以及将其添加到启动文件时都是多余的,因为该PATH
变量已经是环境变量,除非您明确使用了unset
它。)
除了获取您刚刚修改的 shell 初始化文件之外,没有其他方法可以PATH
在已经活动的 shell 会话中修改变量的值(您想避免这种情况,这是可以理解的,因为这样做也可能会执行各种操作)其他事物)。
重新启动 shell(而不是重新启动)也应该有效,特别是如果您将 shell 作为登录 shell 启动(如果默认情况下它们不是登录 shell,则可以使终端模拟器将 shell 作为登录 shell 启动,如在 macOS 上)。
答案2
包括您的 PATH 添加,$HOME/.bash_profile
当您启动 Bash 时,它会在每个 Bash 实例中执行...
更多详情:man bash
在 bash 提示符下 输入,
然后查找特定部分:
输入/
andINVOCATION
和ENTER。
答案3
我认为你可以将它放在 PS1 中,这样无论何时弹出 shell,你都可以获取 .bashrc 或做任何你喜欢的事情。
需要一些智能检查,也许在 .bashrc 中添加一行,将 .bashrc 的时间戳放入变量中?然后您可以检查 PS1 命令是否已更新文件。
第二部分可能会更棘手,如果您总是向 PATH 变量追加更多内容,那么它会随着每次更新而无限增长。要么在 .bashrc 的开头设置一个固定值,要么在添加所有组件后以某种方式在末尾过滤重复项。
没有时间更多地考虑这一点,但很高兴看看它是否有效。 :-)