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


39

Я намагаюся створити сценарій, в якому nvmі врешті-решт буде встановлений вузол.
Я встановив nvmcURL. Я бачу модифікації у файлі .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

Відповіді:


69

nvmкоманда - це функція оболонки, оголошена в ~/.nvm/nvm.sh.

Ви можете створити будь-який із наступних сценаріїв на початку вашого, щоб зробити nvm()доступними:

. ~/.nvm/nvm.sh
. ~/.profile
. ~/.bashrc
. $(brew --prefix nvm)/nvm.sh  # if installed via Brew

Привіт, дякую. Це має сенс, оскільки 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на початку вашого сценарію (або, як я вже писав вище, - джерело .profile/ .bashrc)
webKnjaZ

2

Якщо ви встановили його за допомогою brew на OSX, ви можете завантажити сценарій завареного пива у сценарій env, додавши його до деталей про встановлення.

Я маю це в проектах, щоб їх завантажувати:

brew install nvm
. $(brew --prefix nvm)/nvm.sh
nvm install
...

1

Невелике опис, що відповідає версією відповіді, наданої @webKnjaZ: Я повинен був створити функцію оболонки для кожної команди, щоб вона працювала в моєму скрипті bash. Щось на зразок цього:

. ~/.nvm/nvm.sh --version
. ~/.nvm/nvm.sh install 4.4.5

1
це не працювало для мене. Для мене працювало: ~ / .nvm / nvm.sh nvm --version
jeff

0

Те саме, що сталося нижче, - це те, що працювало для мене:

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

root @ ubuntu: / usr / src / playground # sudo npm install express '/usr/src/playground/package.json' + express@4.16.2 додано 49 пакунків у 129,186

Наведена вище команда є трохи складною, але все, що вона робить, - це скопіювати будь-яку версію вузла, у якої ви працюєте через nvm, в каталог / usr / local / (де встановлені користувачем глобальні файли повинні жити на Linux VPS) та встановити дозволи, щоб всі користувачі можуть отримати доступ до них.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.