‘sudo’不可用(命令不在 PATH 中)

‘sudo’不可用(命令不在 PATH 中)

好的。我不会直接复制粘贴网络上的命令,我也不明白为什么这样做会把事情搞得一团糟,但是这里……

我想为开发人员配置 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 分配。您不需要exportPATH,因为它已经在环境中,并且将一直如此。

~/.profile用以下代码替换最后一行

PATH="$HOME/.npm-global/bin:$PATH"

一切都会好起来的。

我添加了,/bin因为可执行文件可能在那里,正如说明所建议的那样,但如果由于某种原因它们不在,您可以根据需要进行调整。路径查找不是递归的:您希望 Bash 找到的可执行文件的实际目录必须在 PATH 中给出。我也放在了$PATH第一个,但您可以把它放在最后。如果 PATH 目录中有两个同名的命令,则将运行最接近 PATH 开头的命令。

注意:如果您需要在 PATH 损坏时使用关键命令,则可以使用其完整路径,即/usr/bin/sudo。但如果您尚未编辑/etc/environment(通常您可能不应该编辑!),您可以运行source /etc/environment以获取合理的 PATH。

相关内容