Der Befehl nvm ist im Bash-Skript nicht verfügbar

39

Ich versuche, ein Skript zu erstellen, in dem der nvmKnoten installiert wird.
Ich habe nvmmit cURL installiert . Ich sehe die Änderungen in der .profileoder .bashrc-Datei (beide funktionieren) und wenn ich sie nvman der Bash-Eingabeaufforderung
eingebe , werden die verfügbaren Optionen usw. angezeigt. Also funktioniert nvm. Manuell kann ich node installieren, aber sobald ich den nvmBefehl in ein Shell-Skript geschrieben habe:

nano test.sh

#!/bin/bash
nvm

und starte es mit:

chmod 755 test.sh
./test.sh

Ich bekomme:

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

Wenn es nicht finden kann nvm, muss ich nicht einmal daran denken

nvm ls-remote 

oder

nvm install ...

Ich habe Ubuntu 14.04 installiert und Bash ist meine Shell.

alles klar
quelle
Ich würde den Pfad im Skript drucken, bevor ich nvm aufrufe, und prüfen, ob er korrekt ist.
AProgrammer

Antworten:

69

nvmBefehl ist eine in deklarierte Shell-Funktion ~/.nvm/nvm.sh.

Sie können eines der folgenden Skripte zu Beginn Ihres Projekts zur nvm()Verfügung stellen:

. ~/.nvm/nvm.sh
. ~/.profile
. ~/.bashrc
. $(brew --prefix nvm)/nvm.sh  # if installed via Brew
webKnjaZ
quelle
Hallo danke. Dies ist dann sinnvoll, da nvm in ~ / .nvm "installiert" ist. Und ist wahrscheinlich nur ein Shell-Skript. Was mir allerdings fehlt, ist, dass ich nvm eingeben und zum Laufen bringen kann, aber wenn ich die Shell-Skripte in ~ / .nvm ausprobiere, funktioniert es nicht.
okidoki
was meinst du trying the shell scripts in ~/.nvm? Ich erklärte, wie man nvmvom Shell-Skript oben läuft . Ist etwas unklar?
webKnjaZ
Um meinen letzten Kommentar zu erläutern. Wenn ich "sudo find / -iname nvm *", finde ich nur Dinge in meinem ~ / .nvm-Ordner. Das Ausführen von ~ / .nvm / nvm-exec oder ~ / .nvm / nvm.sh (die einzigen Dateien in ~ / .nvm, die sich als Shell-Skripte herausstellen) gibt mir kein nvm, wie das bloße Eingeben von "nvm" die Befehlszeile. Wo ist also die Verbindung zwischen nvm und dem Programm?
Okidoki
Oh .. Ich denke, es nvmist eine aliasin Ihrer Shell-Umgebung. Bitte posten Sie die Ausgabe von which nvmund dies wird die Dinge klären.
webKnjaZ
2
Ich habe vor Ort installiert nvmund einige Nachforschungen angestellt. nvmist eine Shell-Funktion, die in deklariert nvm.shist. Sie müssen sie also nur . ~/.nvm/nvm.sham Anfang Ihres Skripts (oder, wie ich oben geschrieben habe, - source .profile/ .bashrc)
webKnjaZ 12.02.15
2

Wenn Sie es über Brew unter OSX installiert haben, können Sie das aus Brew stammende Skript in die Skriptumgebung laden, indem Sie es als Quelle für Details zur Installation angeben.

Ich habe dies in Projekten, um sie zu booten:

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

Kleiner Hinweis auf die Antwort von @webKnjaZ: Ich musste für jeden Befehl eine Shell-Funktion verwenden, damit er in meinem Bash-Skript funktioniert. Etwas wie das:

. ~/.nvm/nvm.sh --version
. ~/.nvm/nvm.sh install 4.4.5
rahulthakur319
quelle
1
es hat bei mir nicht funktioniert. Folgendes hat für mich funktioniert: ~ / .nvm / nvm.sh nvm --version
jeff
0

Das Gleiche, was sich darunter befand, war das, was für mich funktioniert hat:

root @ ubuntu: / usr / src / playground # n = $ (welcher Knoten); 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 installiere express '/usr/src/playground/package.json' + [email protected] hat 49 Pakete in 129.186s hinzugefügt

Der obige Befehl ist etwas kompliziert, aber alles, was er tut, ist, die über nvm aktive Version des Knotens in das Verzeichnis / usr / local / zu kopieren (in dem sich vom Benutzer installierte globale Dateien auf einem Linux-VPS befinden sollten) und die entsprechenden Berechtigungen festzulegen Alle Benutzer können darauf zugreifen.

ABHISHEK SHARMA
quelle