Ich habe es installiert nvm
und es wurde angehängt an meine/home/www-data/.bashrc
Anrufen nvm
funktioniert.
bash
nvm
Werke
Aber
$ bash -c nvm
bash: nvm: command not found
funktioniert nicht.
dasselbe, wenn ich die RC-Datei spezifiziere
$ bash --rcfile /home/www-data/.bashrc -c "nvm"
bash: nvm: command not found
Warum das?
Im Endergebnis möchte ich nvm im RoboFile exec()-Befehl verwenden und habe versucht, es einzubinden, bash -c
da nvm
es sich um eine Bash-Funktion und nicht um ein echtes Skript handelt.
Antwort1
Warum das?
Wenn bash mit aufgerufen -c
wird, läuft es alsnicht interaktivShell. Die standardmäßigen Startdateien der interaktiven Shell ( /etc/bash.bashrc
, ~/.bashrc
) werden nicht gelesen. Selbst wenn Sie ~/.bashrc
das Lesen erzwingen, wird der Hauptteil wahrscheinlich nicht ausgeführt - der Standard-Ubuntu-Start (der bei der Kontoerstellung aus /etc/skel kopiert wurde) enthält beispielsweise die Zeilen
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
wodurch alles Folgende umgangen wird.
Dukönnteerzwingen Sie eine interaktive Shell mithilfe von bash -ic
. Dies kann jedoch, abhängig von den sonstigen Inhalten Ihres , zu anderen Problemen führen .bashrc
.
Antwort2
Versuchen
bash -ic nvm
Ausführen von Bash als interaktive ShellUndDie Bereitstellung eines Befehls scheint nicht der Bash-Dokumentation zu entsprechen, funktioniert aber.
Antwort3
Ich wechselte zuhttps://www.npmjs.com/package/nwas in diesem Fall viel besser funktioniert.
Es ist eine Alternative zu nvm
und benötigt nicht all diese Bash-Skripte. Deshalb funktioniert es wahrscheinlich auch ohne die oben genannten Probleme.
n
kann mit dem folgenden Befehl installiert werden:
npm install -g n