Команда nvm недоступна в скрипте bash

39

Я пытаюсь построить сценарий, в котором nvmи в конечном итоге узел будет установлен.
Я установил nvmс CURL. Я вижу изменения в файле .profileили .bashrc(оба работают), и при вводе nvmв командной строке bash, он показывает доступные опции и т.д.
Так что nvm работает. Вручную я могу установить узел, но как только я добавлю nvmкоманду в скрипт оболочки:

nano test.sh

#!/bin/bash
nvm

и запустить его с:

chmod 755 test.sh
./test.sh

Я получил:

./test.sh: line 2: nvm: command not found

Если он не может найти nvm, мне даже не нужно думать о

nvm ls-remote 

или

nvm install ...

Я установил Ubuntu 14.04, а Bash - моя оболочка.

Оки Доки
источник
Я бы напечатал путь в скрипте перед вызовом nvm и проверил, правильно ли он.
AProgrammer

Ответы:

70

nvmкоманда является функцией оболочки, объявленной в ~/.nvm/nvm.sh.

Вы можете использовать любой из следующих сценариев в начале своего, чтобы сделать их nvm()доступными:

. ~/.nvm/nvm.sh
. ~/.profile
. ~/.bashrc
. $(brew --prefix nvm)/nvm.sh  # if installed via Brew
webKnjaZ
источник
Привет спасибо. Это имеет смысл тогда, когда nvm «установлен» в ~ / .nvm. И это, вероятно, просто сценарий оболочки. Чего мне не хватает, так это того, что я могу набрать nvm и заставить его работать, но при попытке сценариев оболочки в ~ / .nvm это не работает.
Окидоки
что вы имеете в виду trying the shell scripts in ~/.nvm? Я объяснил, как запустить nvmиз сценария оболочки выше. Есть ли что-то неясное?
webKnjaZ
Чтобы разработать мой последний комментарий. когда я "sudo find / -iname nvm *" я нахожу только вещи в своей папке ~ / .nvm. Выполнение ~ / .nvm / nvm-exec или ~ / .nvm / nvm.sh (единственные файлы в ~ / .nvm, которые являются сценариями оболочки) не дает мне nvm, как просто набрав «nvm» на командная строка. Так где же связь между nvm и программой.
Окидоки
Ох .. Я думаю nvm, это aliasв вашей оболочке. Пожалуйста, which nvmопубликуйте результаты, и это прояснит ситуацию.
webKnjaZ
2
Я установил nvmлокально и сделал некоторые исследования. nvmэто функция оболочки, объявленная в nvm.sh, так что в основном вам просто нужно получить ее . ~/.nvm/nvm.shв начале вашего скрипта (или, как я писал выше, - source .profile/ .bashrc)
webKnjaZ
2

Если вы установили его с помощью brew на OSX, то вы можете загрузить скрипт brew sourced в среду env скрипта, указав его в деталях по установке.

У меня есть это в проектах, чтобы загрузить их:

brew install nvm
. $(brew --prefix nvm)/nvm.sh
nvm install
...
IanVaughan
источник
1

Небольшая сноска поверх ответа, предоставленного @webKnjaZ: мне пришлось исходить из функции оболочки для каждой команды, чтобы она работала в моем bash-скрипте. Что-то вроде этого:

. ~/.nvm/nvm.sh --version
. ~/.nvm/nvm.sh install 4.4.5
rahulthakur319
источник
1
это не сработало для меня. Следующие работал для меня: ~ / .nvm / nvm.sh NVM --version
Джеф мускус
0

То же самое случилось ниже, это то, что работает для меня:

root @ ubuntu: / usr / src / plays # n = $ (какой узел); n = $ {n% / bin / node}; chmod -R 755 $ н / бин / *; sudo cp -r $ n / {bin, lib, share} / usr / local

root @ ubuntu: / usr / src / plays # sudo npm install express '/usr/src/playground/package.json' + express@4.16.2 добавил 49 пакетов в 129.186 с

Вышеприведенная команда немного сложна, но все, что она делает, это копирует любую версию узла, которую вы используете, через nvm в каталог / usr / local / (где установленные пользователем глобальные файлы должны жить на Linux-VPS) и устанавливая разрешения так, чтобы все пользователи могут получить к ним доступ.

АБИШЕК ШАРМА
источник