Почему команда nvm установлена ​​как root, а также не найдена во время бродячего bootstrap.sh?

Когда я пытаюсь установить nvm и проверить, установлен ли он в моем сценарии подготовки бродячей оболочки, используя:

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, чтобы избежать проблем с разрешениями.

Во-вторых, почему команда не найдена, когда я запускал source .bashrc, как указано в инструкциях по установке nvm здесь https://github.com/creationix/nvm?

У меня есть решение, которое я добавляю сейчас.


person tobuslieven    schedule 24.07.2016    source источник


Ответы (1)


Итак, во-первых, если вы хотите установить что-то в качестве бродячего пользователя во время скрипта bootstrap.sh, самый простой способ сделать это — добавить еще один скрипт инициализатора в ваш 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 напрямую, то есть не через файл .bashrc, как указано в инструкциях по установке nvm. Это связано с тем, что в .bashrc есть строка, которая завершается раньше, если она запускается в неинтерактивной оболочке, что, я думаю, является бродягой. Из .bashrc:

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

Итак, вместо source ~/.bashrc вам нужно:

source ~/.nvm/nvm.sh
person tobuslieven    schedule 24.07.2016