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
чтобы получить вменяемый путь.