无法从 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的主要内容,如果未能解决你的问题,请参考以下文章

无法从 bash shell 脚本执行 Tcl 脚本

无法从 BASH 脚本中运行 psql 命令

无法从外部 bash 脚本正确设置 MySQL 密码

无法从 BASH 脚本中建立 Oracle SQL 会话

当它从命令行 bash 工作时,无法从 crontab 运行 bash 脚本

无法在 bash 脚本中设置变量 [重复]