首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何执行"sudo nvm"?

如何执行"sudo nvm"?
EN

Stack Overflow用户
提问于 2018-03-06 11:51:21
回答 3查看 3.4K关注 0票数 2

在我的Mac上,我想将一些需要su权限的包迁移到另一个节点版本。

我使用了自制来安装nvm,现在我需要执行sudo,否则--reinstall-packages就会失败。

代码语言:javascript
复制
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)

我认为这个命令是找不到的,因为sudo正在寻找不同的路径。不过,我在/usr/local/opt/nvm中找到了/usr/local/opt/nvm

代码语言:javascript
复制
sudo /usr/local/opt/nvm/nvm.sh ls

什么都不回。

甚至

代码语言:javascript
复制
/usr/local/opt/nvm/nvm.sh ls

不返回任何内容,因此我怀疑这是错误的shell脚本。

我如何使用sudo显式地调用nvm?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-07 17:17:06

考虑定义一个shell函数包装器:

代码语言:javascript
复制
nvmsudo() { sudo bash -lic '. /usr/local/opt/nvm/nvm.sh && nvm "$@"' _ "$@"; }

...thereafter:

代码语言:javascript
复制
nvmsudo --version

...or...

代码语言:javascript
复制
nvmsudo install 5.4.1 --reinstall-packages-from=9.6.1

为了解释上述逻辑:

  • 使用-l-i参数可以确保运行目标用户的dotfile(在本例中是root),这似乎是nvm正确操作所必需的。
  • bash -c的下一个参数必须是脚本。在执行脚本的上下文中,后面的参数成为$0$1等。
  • 函数上下文中的"$@"指函数的全部参数集。
  • "$@"bash -c脚本的上下文中是指在-c之后传递给shell的完整参数集(从$1开始,因此跳过_)。
票数 5
EN

Stack Overflow用户

发布于 2018-03-06 12:37:42

尝试使用以下命令:-

代码语言:javascript
复制
sudo -u <username> /usr/local/opt/nvm/nvm.sh

不要先使用ls,如果它有效,那么只尝试使用ls

票数 0
EN

Stack Overflow用户

发布于 2018-03-07 17:09:21

我找到了一个解决方案,即使在我看来这不是一个美丽的解决方案。

我有个误会,怀疑nvm.sh会被直接叫上nvm。实际上,nvm.sh包含几个shell函数,这些函数加载在用户shell环境中,而不是在根shell环境中。

首先,我启用了根用户将其登录到终端。然后,我不得不source nvm.sh的内容来定义su环境中的函数。然后我可以运行这个命令,su找到了它:

代码语言:javascript
复制
me@MacBook:~$ su
Password:
root@MacBook:/Users/me$ source /usr/local/opt/nvm/nvm.sh
root@MacBook:/Users/me$ nvm --version
0.33.8

行得通!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49130176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档