无法从 bash 脚本中使用 nvm
Posted
技术标签:
【中文标题】无法从 bash 脚本中使用 nvm【英文标题】:Can't use nvm from bash script 【发布时间】:2016-05-14 09:38:15 【问题描述】:我正在尝试编写一个 shell 脚本来自动化我的开发环境设置(安装 python、nvm、node、mongo 等...)。我正在使用 nvm 来安装 Node。它告诉您关闭并重新打开终端以开始使用 nmv 命令。我尝试获取 .bashrc 和 .profile 以使命令立即可用,以便我可以继续使用 nvm install 运行脚本,但它不起作用。
这是我的脚本中与安装 NVM / Node 相关的部分:
#install nvm and latest node version
# sourcing profile and bashrc is not working here. nvm does not execute the next two lines to install node.
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.30.2/install.sh | bash
source ~/.profile
source ~/.bashrc
nvm install 5.0
nvm alias default node
我收到这些消息,但请注意,我已经运行了脚本,并且 NVM / Node 已经安装并正在运行。我还可以在完成后运行脚本的同一终端中使用 nvm 和节点。它只是在脚本中不起作用。
=> Downloading nvm from git to '/home/myDir/.nvm'
=> fatal: destination path '/home/myDir/.nvm' already exists and is not an empty directory.
fatal: Not a git repository (or any of the parent directories): .git
fatal: Not a git repository (or any of the parent directories): .git
=> Source string already in /home/myDir/.bashrc
=> Close and reopen your terminal to start using nvm
./install-programs.sh: line 27: nvm: command not found
./install-programs.sh: line 28: nvm: command not found
【问题讨论】:
在 unix&linux 上有一个等价的问题:unix.stackexchange.com/questions/184508/… 【参考方案1】:如今,您只需这样做:
env NODE_VERSION=<dd> /home/<user>/.nvm/nvm-exec npm run front
简单地采购 nvm.sh 对我不起作用(来自 systemd .service 文件),PATH 不包括 ~/.nvm...
信用到期:https://gist.github.com/joepie91/73ce30dd258296bd24af23e9c5f761aa#gistcomment-2215867
【讨论】:
【参考方案2】:只要把它放在你的脚本之上:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
在这里工作就像一个魅力。
【讨论】:
【参考方案3】:如果你在主 shell 上运行 nvm,你只需要添加:
export NVM_DIR=$HOME/.nvm;
source $NVM_DIR/nvm.sh;
在你的脚本中
【讨论】:
您费尽心思创建了 NVM_DIR 目录,然后没有使用它!我可以建议 NVM_HOME 然后获取 $NVM_HOME/nvm.sh。顺便说一句,工作得很好。谢谢。 我不需要导出NVM_DIR
。从我的 bash 脚本中只执行第二行就足以让 nvm 可以访问。
设置 NVM_DIR
如果未将 nvm 安装到您的主目录中,则会出现问题。例如 brew 将 nvm 安装到/usr/local
。从父级继承NVM_DIR
可能是一种更合理的方法。
源代码在 POSIX 中不可用...如果您关心 docker alpine 或 android termux 等瘦 linux 映像的可移植性,请使用 .
。这个配对机智if [ -f "$NVM_DIR/nvm.sh" ]; then
帮助我在可用时使用.nvmrc
。这是要点gist.github.com/simov/cdbebe2d65644279db1323042fcf7624【参考方案4】:
这个脚本对我来说很好用:
#!/usr/bin/env bash
if [ ! -d ~/.nvm ]; then
curl https://raw.githubusercontent.com/creationix/nvm/v0.11.1/install.sh | bash
source ~/.nvm/nvm.sh
source ~/.profile
source ~/.bashrc
nvm install 5.0
npm install
npm run front
fi
【讨论】:
【参考方案5】:这对我有用。
首先使用 SSH 或控制台安装 nvm(一次且单独):
$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.30.2/install.sh | bash
然后在您的脚本中,按如下方式加载您的个人资料:
. ~/.nvm/nvm.sh
. ~/.profile
. ~/.bashrc
如果运气好的话,nvm
应该可以在脚本中使用。
nvm install 4.4.2
多田!
【讨论】:
我把这些东西放在我的脚本顶部,瞧,完美。 添加 . ~/.nvm/nvm.sh 在使用之前对我有用,谢谢! 无法从 bash 脚本中访问已安装的节点版本?我可以更改和使用 nvm,但说即使相同的命令直接在终端中工作,也没有安装。以上是关于无法从 bash 脚本中使用 nvm的主要内容,如果未能解决你的问题,请参考以下文章