为什么 nvm 命令以 root 身份安装并且在 vagrant bootstrap.sh 期间也找不到?

Why is nvm command installed as root and also not found during vagrant bootstrap.sh?

当我尝试安装 nvm 并测试它是否安装在我的 vag运行t shell 配置脚本中时,使用:

sudo wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.3/install.sh | bash
source ~/.bashrc
nvm

我得到:

==> default: => Downloading nvm as script to '/root/.nvm'
==> default: => Appending source string to /root/.bashrc
==> default: => You can now install Node.js by running `nvm install`
==> default: /tmp/vagrant-shell: line 7: nvm: command not found

首先我不希望它以root身份安装,我想在/home/vagrant中以vag运行t用户身份安装它以避免权限问题。

其次,为什么当我在此处 https://github.com/creationix/nvm 的 nvm 安装说明中指定 运行 source .bashrc 时找不到命令?

我有一个解决方案,现在正在添加。

所以首先,如果你想在 bootstrap.sh 脚本期间以 vagrant 用户的身份安装 somethnig,最简单的方法是将另一个配置脚本添加到你的 Vagrantfile 中,它是 运行 非特权模式:

config.vm.provision "ScriptRunAsRoot", type:"shell", path: "Vagrantdata/rootUserBootstrap.sh"
config.vm.provision "ScriptRunAsVagrantUser", privileged: false, type:"shell", path: "Vagrantdata/vagrantUserBootstrap.sh"

然后要在这种情况下获取 nvm 命令,您必须确保直接 运行 nvm.sh 脚本,即不是通过 nvm 安装说明中所述的 .bashrc 文件。这是因为 .bashrc 有一行如果它在非交互式 shell 中被 运行 提前退出,我猜 vagrant 就是这样。来自 .bashrc:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

因此,您需要:

而不是 source ~/.bashrc
source ~/.nvm/nvm.sh