sudo недоступно (команда отсутствует в PATH)

Хорошо. Я не просто копирую и вставляю команды из сети, и я не видел, как / почему это может все испортить, но здесь...

Я хотел настроить webstorm для dev. Поэтому я следовал этим инструкциям:

$  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, вместо добавления? Как это исправить?

Да, похоже, что он сделал, вот мое эхо $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 чтобы получить вменяемый путь.

Другие вопросы по тегам