nvm命令在bash脚本中不可用


39

我正在尝试构建一个脚本,nvm并最终在其中安装节点。
我已经安装nvm了cURL。我在.profile.bashrc文件中看到了修改(都可以使用),并且nvm在bash提示符下键入时,它显示了可用的选项等。
因此nvm可以使用。我可以手动安装节点,但是只要将nvm命令放入shell脚本中:

nano test.sh

#!/bin/bash
nvm

并运行:

chmod 755 test.sh
./test.sh

我得到:

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

如果找不到nvm,我什至不必想

nvm ls-remote 

要么

nvm install ...

我安装了Ubuntu 14.04,Bash是我的shell。


在调用nvm之前,我会在脚本中打印路径,并检查其是否正确。
AProgrammer

Answers:


69

nvmcommand是在中声明的shell函数~/.nvm/nvm.sh

您可以在您的脚本的开头提供以下两个脚本之一以nvm()供使用:

. ~/.nvm/nvm.sh
. ~/.profile
. ~/.bashrc
. $(brew --prefix nvm)/nvm.sh  # if installed via Brew

你好谢谢。这很有意义,因为nvm是“安装”在〜/ .nvm中的。而且可能只是一个shell脚本。我所缺少的是我可以键入nvm并使其正常工作,但是在〜/ .nvm中尝试shell脚本时却不起作用。
okidoki 2015年

你是什​​么意思trying the shell scripts in ~/.nvm?我已经解释了如何nvm从上面的shell脚本运行。有什么不清楚的地方吗?
webKnjaZ

详细阐述我的最后评论。当我“ sudo find / -iname nvm *”时,我只在〜/ .nvm文件夹中找到东西。执行〜/ .nvm / nvm-exec或〜/ .nvm / nvm.sh(〜/ .nvm中唯一的文件,原来是shell脚本)并不能为我提供nvm,就像只是在输入“ nvm”命令行。那么,nvm和程序之间的链接在哪里。
okidoki 2015年

哦..我想这nvmalias您的shell环境中。请发布输出,which nvm这将清除所有内容。
webKnjaZ

2
我已经nvm在本地安装并进行了一些研究。nvm是在中声明的shell函数nvm.sh,因此,基本上,您只需要. ~/.nvm/nvm.sh在脚本的开头提供源代码(或者,正如我在上面所述,.profile.bashrc
-source

2

如果您是通过OSX上的brew安装的,则可以通过在安装时详细获取brew源脚本来将brew源脚本加载到脚本环境中。

我在项目中有这个来引导他们:

brew install nvm
. $(brew --prefix nvm)/nvm.sh
nvm install
...

1

@webKnjaZ提供的答案上方有一个小标注:我必须为每个命令提供shell函数,以使其在我的bash脚本中起作用。像这样:

. ~/.nvm/nvm.sh --version
. ~/.nvm/nvm.sh install 4.4.5

1
它对我不起作用。以下对我有用:〜/ .nvm / nvm.sh nvm --version
jeff musk

0

以下同样是对我有用的东西:

root @ ubuntu:/ usr / src / playground#n = $(哪个节点); n = $ {n%/ bin / node}; chmod -R 755 $ n / bin / *; 须藤cp -r $ n / {bin,lib,share} / usr / local

root @ ubuntu:/ usr / src / playground#sudo npm install express'/usr/src/playground/package.json'+ express@4.16.2在129.186s中添加了49个软件包

上面的命令有点复杂,但是它要做的就是将通过nvm激活的任何版本的节点复制到/ usr / local /目录(用户安装的全局文件应位于Linux VPS上)并设置权限,以便所有用户都可以访问它们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.