好的。我不会直接复制粘贴网络上的命令,我也不明白为什么这样做会把事情搞得一团糟,但是这里……
我想为开发人员配置 webstorm。所以我按照这些说明:
$ mkdir ~/.npm-global # directory where npm will install packages
$ npm config set prefix '~/.npm-global' # configure npm
$ echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.profile #add directory to path
$ source ~/.profile # refresh path for current session
现在,如果我输入大多数命令,我会得到这样的结果:
anonymous@anonymous:/home$ sudo nano ~/.profile
Command 'sudo' is available in '/usr/bin/sudo'
The command could not be located because '/usr/bin' is not included in the PATH environment variable.
sudo: command not found
我不明白为什么这会破坏我的所有命令。他是否覆盖了 PATH 中的任何内容,而不是附加?我该如何修复这个问题?
是的,看起来他确实这么做了,这是我的 echo $PATH:
anonymous@anonymous:/home$ echo $PATH
/home/anonymous/.npm-global
内容 ~/.profile
:
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
export PATH=~/.npm-global
答案1
说明告诉您运行此命令:
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.profile #add directory to path
看来你确实跑了:
echo 'export PATH=~/.npm-global' >> ~/.profile
问题是你错过了:$PATH
。
$PATH
被扩展为它的值,如果一切顺利,应该类似于/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
。请注意,PATH 中的目录以冒号 ( :
) 分隔。这就是为什么原始命令有PATH=/new/path:$PATH
- 这会将新路径放在重建的 PATH 变量的开头。
我建议您引用 PATH 分配。您不需要export
PATH,因为它已经在环境中,并且将一直如此。
~/.profile
用以下代码替换最后一行
PATH="$HOME/.npm-global/bin:$PATH"
一切都会好起来的。
我添加了,/bin
因为可执行文件可能在那里,正如说明所建议的那样,但如果由于某种原因它们不在,您可以根据需要进行调整。路径查找不是递归的:您希望 Bash 找到的可执行文件的实际目录必须在 PATH 中给出。我也放在了$PATH
第一个,但您可以把它放在最后。如果 PATH 目录中有两个同名的命令,则将运行最接近 PATH 开头的命令。
注意:如果您需要在 PATH 损坏时使用关键命令,则可以使用其完整路径,即/usr/bin/sudo
。但如果您尚未编辑/etc/environment
(通常您可能不应该编辑!),您可以运行source /etc/environment
以获取合理的 PATH。