修改 $PATH 变量

10

尝试安装node.js。

使用brew install node命令安装。

看起来安装成功了。

但是,在安装完成后收到了以下信息:

Homebrew已安装npm。
我们建议将以下路径添加到您的PATH环境变量中,以便捷地使用 npm:
/usr/local/share/npm/bin

好的,那么我打开我的bash_profile文件...

这是我在文件中的内容:

 export PATH="/usr/local/bin:/usr/local/sbin:~/bin:$PATH"

 [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

我试图理解如何正确修改它,以免破坏它......

我是这样添加 /usr/local/share/npm/bin 的吗?

export PATH="/usr/local/bin:/usr/local/sbin:~/bin/usr/local/share/npm/bin:$PATH"

如果没有,请问添加该路径的正确方法是什么?

非常感谢提供任何帮助!

附言:如果有任何其他信息可以提供,请让我知道

编辑

在看到 macedigital 的答案中的 which npm 后,我运行了它...

得到了这个:/usr/local/bin/npm

这是在我做第二个答案(即 ThiefMaster 的答案)之前。

重新运行 which npm ...

得到了和之前一样的答案...

我执行了 echo $PATH 并得到了这个:

/Users/name/.rvm/gems/ruby-1.9.3-p374/bin:/Users/name/.rvm/gems/ruby-1.9.3-p374@global/bin:/Users/name/.rvm/rubies/ruby-1.9.3-p374/bin:/Users/name/.rvm/bin:/usr/local/share/npm/bin:/usr/local/bin:/usr/local/sbin:~/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/usr/local/git/bin

所以看起来我已经安装了它?

那么,我应该如何处理这些答案?我不想让它悬而未决,因为你们两个都很有帮助,而且我感到很抱歉我没有提供 echo $PATH 信息,因为这会告诉你我已经安装了它...

编辑2

ls -la /usr/local/share/npm/bin 得到这个:

ls: /usr/local/share/npm/bin: 没有那个文件或目录

which -a npm 得到这个:/usr/local/bin/npm

编辑3

ls -a /usr/local/bin/npm 得到这个: /usr/local/bin/npm

没有时间戳...

3个回答

11

简短回答,做如下操作(请注意我插入的冒号):

export PATH="/usr/local/share/npm/bin:/usr/local/bin:/usr/local/sbin:~/bin:$PATH"

$PATH 环境变量是一个用 冒号 分隔的目录列表,如果你想在不使用完整路径的情况下运行命令(例如运行 npm 而不必输入 /usr/local/share/npm/bin/npm),需要在其中查找内容。

你可以在终端上尝试一下,然后再将更改保存到 bash_profile 文件中。如果一切正常,which -a npm 将显示所有完全限定路径。

更新

为了使用 npm,不必修改 $PATH 变量。相反,homebrew 安装推荐的是将存储 npm 安装的二进制文件的目录添加到 $PATH 变量中,这样以后从命令行更方便地使用它们。

像 phantomjs、phonegap、express 等 Node 模块提供的二进制文件,在更改后可在命令提示符下使用而无需输入完整路径。


现在,如果有一个 npm 二进制文件,例如在 /usr/local/bin 中,则不会使用 /usr/local/share/npm/bin 中的二进制文件... - ThiefMaster
感谢你的投票,伙计。which npm(带或不带上述更改)将显示第一个匹配的 npm 二进制文件(按指定目录顺序...)的位置。 - macedigital
没错,但他可能想要覆盖掉已经安装在那里的另一个(旧的/过时的)版本。无论如何,在你的回答中提到为什么没有在目录前加上前缀可能是个好主意。 - ThiefMaster
你能执行 ls -la /usr/local/share/npm/bin 命令来确认 npm 命令是否在该目录下吗?你也可以尝试执行 which -a npm 命令,这样它会列出所有找到的条目,而不仅仅是第一个。由于上述路径位于 /usr/local/bin 之前,因此应该首先被选中。 - macedigital
@macedigital,嘿,根据您的要求更新了附加信息...看起来我只有一个版本... - user273072545345
显示剩余4条评论

10
最清晰的解决方案是在您发布的这两行代码之间添加以下内容:
export PATH="/usr/local/share/npm/bin:$PATH"

这样一来,所有内容都保持可读性,并像该程序建议的那样将其添加到 PATH 中。如果您想撤消更改,只需删除该行,而不是编辑可能很长的行。


2

在路径顺序中很重要。因此,在所需的npm版本之前的任何内容仍会导致问题。

#adding in first place of the path, before anything else
export PATH=/usr/local/bin:otherPathEntries:$PATH

假设您想要的npm版本在/usr/local/bin中,要检查所有版本,请使用'which -a npm'。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接