Как выполнить "sudo nvm"?
На моем Mac я хочу перенести некоторые пакеты, требующие прав su, в другую версию узла.
Я использовал homebrew для установки nvm, и теперь мне нужно выполнить sudo nvm или --reinstall-packages
не получится.
me@MacBook:~$ sudo nvm
sudo: nvm: command not found
me@MacBook:~$ sudo node -v
v5.4.1
me@MacBook:~$ sudo npm -v
3.3.12
me@MacBook:~$ nvm ls
-> v5.4.1
v9.6.1
system
default -> 5.4.1 (-> v5.4.1)
node -> stable (-> v9.6.1) (default)
stable -> 9.6 (-> v9.6.1) (default)
iojs -> N/A (default)
lts/* -> lts/carbon (-> N/A)
lts/argon -> v4.8.7 (-> N/A)
lts/boron -> v6.13.0 (-> N/A)
lts/carbon -> v8.9.4 (-> N/A)
Я думаю, что команда не может быть найдена, потому что судо ищет в разных направлениях. Я нашел ... nvm.sh в /usr/local/opt/nvm
, однако:
sudo /usr/local/opt/nvm/nvm.sh ls
Ничего не возвращает.
Даже
/usr/local/opt/nvm/nvm.sh ls
Ничего не возвращает,поэтому я подозреваю, что это неправильный сценарий оболочки.
Как я могу вызвать nvm с судо, понятно?
3 ответа:
Рассмотрим определение оболочки функции оболочки:
nvmsudo() { sudo bash -lic '. /usr/local/opt/nvm/nvm.sh && nvm "$@"' _ "$@"; }
...после этого:
nvmsudo --version
...или...
nvmsudo install 5.4.1 --reinstall-packages-from=9.6.1
Чтобы объяснить вышеприведенную логику:
- используя аргументы
-l
и-i
для bash, убедитесь, что dotfiles для целевого пользователя (в данном случаеroot
) выполняются, что, по-видимому, необходимо для правильной работыnvm
.bash -c
непосредственным следующим аргументом должен быть сценарий. Аргументы, следующие за этим, становятся$0
,$1
, и т.д. в контекст, в котором выполняется скрипт."$@"
в контексте функции относится к полному набору аргументов функции."$@"
в контексте скриптаbash -c
относится к полному набору аргументов (начиная с$1
, поэтому пропуск_
) передается в оболочку после-c
.
Попробуйте выполнить следующую команду: -
sudo -u <username> /usr/local/opt/nvm/nvm.sh
Не используйте
ls
Сначала, если это работает, то только попробуйте сls
Я нашел решение, даже если это, на мой взгляд, не самое красивое решение.
У меня было недоразумение, подозревая, что
nvm.sh
получает вызов наnvm
, напрямую. Фактически,nvm.sh
содержит несколько функций оболочки, которые загружаются в пользовательскую оболочку, но не в корневую оболочку.Во-первых, я включил корневого пользователя и зарегистрировал его на терминале. Затем я должен был
source
Содержаниеnvm.sh
определить функции в среде su. потом я смог запустить команду и Су нашел ее:me@MacBook:~$ su Password: root@MacBook:/Users/me$ source /usr/local/opt/nvm/nvm.sh root@MacBook:/Users/me$ nvm --version 0.33.8
Работает!