Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何从bash脚本运行NVM命令_Node.js_Bash_Shell_Unix_Nvm - Fatal编程技术网

Node.js 如何从bash脚本运行NVM命令

Node.js 如何从bash脚本运行NVM命令,node.js,bash,shell,unix,nvm,Node.js,Bash,Shell,Unix,Nvm,我想从bash脚本运行NVM命令,即nvmuse0.12.7。因此,我在bash文件中编写了: #!/bin/bash . ~/.nvm/nvm.sh nvm use 0.12.7 然后在终端中以sudo./script.sh的形式运行命令(script.sh是我的bash文件,上面的代码就是在这里编写的)。它现在使用节点v0.12.7给出了结果。但当我检查版本是否激活时,我发现没有影响。i、 e.我运行命令nvm ls,发现结果如下: v0.12.0 v0.12.7 这意味着未激活版本0.

我想从bash脚本运行
NVM
命令,即
nvmuse0.12.7
。因此,我在bash文件中编写了:

#!/bin/bash
. ~/.nvm/nvm.sh
nvm use 0.12.7
然后在终端中以
sudo./script.sh
的形式运行命令(script.sh是我的bash文件,上面的代码就是在这里编写的)。它现在使用节点v0.12.7给出了结果
。但当我检查版本是否激活时,我发现没有影响。i、 e.我运行命令
nvm ls
,发现结果如下:

v0.12.0
v0.12.7

这意味着未激活版本
0.12.7
。那么,我应该在bash脚本中编写哪些内容,以便从bash文件中激活节点版本。

nvm
的优点之一是,您不需要使用
sudo
来安装版本或切换到其他版本。我不知道您为什么在
nvm
命令中使用
sudo

正如其他人所说,问题在于版本在子shell中更改。因此,“真实”shell中的版本不会更改

您可以通过在脚本前面使用
(点空格)运行脚本来实现这一点。这将使脚本能够更改当前shell中的内容

这是我的
~/bin/nvm-use-4
脚本:

. /usr/local/opt/nvm/nvm.sh
nvm use 4
使用它:

prawie:~$ nvm current
v0.10.29
prawie:~$ . nvm-use-4
Now using node v4.2.1
prawie:~$ nvm current
v4.2.1
如果您被迫在这里使用
sudo
,我认为不可能实现您想要的,因为sudo'ed命令是在一个子shell中运行的

不幸的是,您没有告诉use为什么要这样做,或者您想要完成什么。可能有更好的解决方案来解决你的问题。例如,如果您希望在打开新shell时始终使用特定版本的
node.js
,可以将以下行添加到
.profile
.bashrc
或等效文件中:

nvm use 0.12.7

我对linux的sudo不是很在行,但我认为这是因为它为超级用户而不是当前用户设置了节点版本?你能在没有sudo的情况下运行脚本吗?是的,但得到了相同的结果。我能想到的唯一其他原因是,它在子shell中设置了nvm版本。我想这是因为您正在脚本中设置shell会话的值。不是当前终端中使用的节点版本。尝试使用本文答案中的命令:nvm alias default 0.12.7如何
~/.nvm/nvm.sh&&nvm use 0.12.7
,来自当前shell感谢您提供的各种信息。关于
sudo
,我尝试了使用或不使用
sudo
。但是我在问题中提到的sudo的时候,它不起作用了。我可以看到,如果我使用
nvm
的其他命令并运行
script.sh
,它可以工作,但通过shell脚本激活节点版本不起作用。i、 e.
nvm使用0.12.0
或类似的东西。如果您运行
,它应该是。script.sh
,开头有一个点和一个空格。那有用吗?太棒了。它确实有效。今天我知道了一件新事情。非常感谢。