La commande nvm n'est pas disponible dans le script bash

39

J'essaye de construire un script dans lequel nvmet éventuellement le noeud sera installé.
J'ai installé nvmavec cURL. Je vois les modifications dans le fichier .profileou .bashrc(les deux fonctionnent) et lors de la saisie de l' nvminvite bash, les options disponibles
s'affichent, etc. Ainsi, NVM fonctionne. Je peux manuellement installer node, mais dès que je mets la nvmcommande dans un script shell:

nano test.sh

#!/bin/bash
nvm

et le lancer avec:

chmod 755 test.sh
./test.sh

Je reçois:

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

S'il ne peut pas trouver nvm, je n'ai même pas à penser à

nvm ls-remote 

ou

nvm install ...

Ubuntu 14.04 est installé et Bash est mon shell.

Oki Doki
la source
J'imprimais le chemin dans le script avant d'appeler nvm et vérifiais s'il était correct.
AProgrammer

Réponses:

70

nvmcommande est une fonction shell déclarée dans ~/.nvm/nvm.sh.

Vous pouvez utiliser l'un des scripts suivants au début du vôtre pour le rendre nvm()disponible:

. ~/.nvm/nvm.sh
. ~/.profile
. ~/.bashrc
. $(brew --prefix nvm)/nvm.sh  # if installed via Brew
webKnjaZ
la source
Salut merci. Cela a du sens alors que nvm est "installé" dans ~ / .nvm. Et est probablement juste un script shell. Ce qui me manque, cependant, c'est que je peux taper nvm et le faire fonctionner, mais lorsque vous essayez les scripts shell dans ~ / .nvm, cela ne fonctionne pas.
okidoki
ce que tu veux dire par trying the shell scripts in ~/.nvm? J'ai expliqué comment utiliser nvmle script shell ci-dessus. Y a-t-il quelque chose qui n'est pas clair?
webKnjaZ
Pour élaborer mon dernier commentaire. quand je "sudo find / -iname nvm *", je ne trouve que des objets dans mon dossier ~ / .nvm. L'exécution de ~ / .nvm / nvm-exec ou ~ / .nvm / nvm.sh (les seuls fichiers de ~ / .nvm, qui se révèlent être des scripts shell) ne me donne pas nvm, comme si vous tapiez simplement "nvm" sur la ligne de commande. Alors, où est le lien entre NVM et le programme.
okidoki
Oh .. Je suppose nvmest un aliasdans votre environnement shell. S'il vous plaît poster la sortie de which nvmet cela va effacer les choses.
webKnjaZ
2
J'ai installé nvmlocalement et fait des recherches. nvmest une fonction shell déclarée dans nvm.sh, vous avez donc simplement besoin de la source . ~/.nvm/nvm.shau début de votre script (ou, comme je l’ai écrit ci-dessus, - source .profile/ .bashrc)
webKnjaZ
2

Si vous l'avez installé via brassage sous OSX, vous pouvez alors charger le script provenant de brassage dans l'enveloppe de script en le recherchant au fur et à mesure de ses détails lors de l'installation.

J'ai ceci dans des projets pour les bootstrap:

brew install nvm
. $(brew --prefix nvm)/nvm.sh
nvm install
...
IanVaughan
la source
1

Petite légende en plus de la réponse fournie par @webKnjaZ: Je devais trouver une fonction shell pour chaque commande afin de la faire fonctionner dans mon script bash. Quelque chose comme ça:

. ~/.nvm/nvm.sh --version
. ~/.nvm/nvm.sh install 4.4.5
rahulthakur319
la source
1
cela n'a pas fonctionné pour moi. Ce qui suit a fonctionné pour moi: ~ / .nvm / nvm.sh nvm --version
jeff musk
0

La même chose est arrivé ci-dessous est la chose qui a fonctionné pour moi:

root @ ubuntu: / usr / src / playground # n = $ (quel nœud); n = $ {n% / bin / nœud}; chmod -R 755 $ n / bin / *; sudo cp -r $ n / {bin, lib, partage} / usr / local

root @ ubuntu: / usr / src / playground # sudo npm installer express '/usr/src/playground/package.json' + [email protected] a ajouté 49 packages dans 129.186s

La commande ci-dessus est un peu compliquée, mais elle ne fait que copier quelle que soit la version du noeud active via nvm dans le répertoire / usr / local / (où les fichiers globaux installés par l'utilisateur doivent résider sur un VPS linux) et définir les permissions afin que tous les utilisateurs peuvent y accéder.

ABHISHEK SHARMA
la source