当前位置: 首页 > 知识库问答 >
问题:

如何在bash脚本中调用“NVM use”,并在脚本执行后保留选定的节点版本?

葛雪松
2023-03-14

对于需要从node.js 12更新到14的构建过程,我希望有一个bash脚本来检测是否安装了NVM,如果安装了,那么NVM使用v14(或者在必要时NVM安装v14),然后我希望NVM选择的节点版本在bash脚本终止后保持在14,而不仅仅是在脚本运行期间。

我可以用这个脚本切换到v14,但是在脚本终止之后,shell环境仍然保持在V12:

#!/bin/bash

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
source ~/.bashrc

nvm --version
echo $NVM_BIN
node --version
nvm use v14
echo $NVM_BIN
node --version

在bash脚本中只执行nvm命令是一个麻烦,因为nvm不是真正的命令,而是一个shell函数,脚本必须使用前三行为脚本设置nvm

输出为:

0.33.11
/home/pi/.nvm/versions/node/v12.21.0/bin
v12.21.0
Now using node v14.16.0 (npm v6.14.11)
/home/pi/.nvm/versions/node/v14.16.0/bin
v14.16.0

但是,当脚本完成时:

我认为技巧可能是在脚本退出时确保环境变量nvm_bin保持在v14路径上,但我不知道如何做到这一点。事实上,我认为执行脚本的shell通常不允许更改父shell中的环境变量。

共有1个答案

左丘弘致
2023-03-14

我想如果你用nvm设置一个别名作为默认,

nvm alias default 14.0.0

节点版本将在任何新的终端实例中持久存在。

 类似资料:
  • 问题内容: 我有一些要自动执行的SQL脚本。过去,我使用过SQL * Plus,并从bash脚本中手动调用了sqlplus二进制文件。 但是,我试图找出是否有一种方法可以连接到数据库,并从bash脚本内部调用该脚本……以便我可以插入查询并使查询相对于特定天数运行过去。 问题答案: 我有点困惑。您应该能够从bash脚本中调用sqlplus。这可能就是您在第一个陈述中所做的 尝试在bash脚本中执行以

  • 问题内容: 我正在用geb进行功能测试。 我的应用程序是使用virgo部署的,并使用HSQLDB来存储数据。我想在此工作版本的应用程序上执行测试,但是每次运行webtests时,我都想从空数据库开始。 我写了一个简单的bash脚本 这将删除数据库并重新启动处女座。 但是,当我将其添加到build.gradle任务执行命令时,它永远不会结束。 为什么这样呢?当我在控制台中运行此脚本时,它会迅速返回(

  • 我试图从一个简单的BASH脚本执行一个简单的PHP脚本。这个网站上的答案不能回答我的问题。 这是我的BASH脚本 这是我的PHP脚本 从命令行运行BASH脚本时,出现以下错误。 我试过键入/usr/bin/php-q/home/username/subfolder/durable2。这很好。它跑起来了

  • 我正在尝试使用空手道执行bash脚本。我可以从karate-config.js和.feature文件中执行脚本。我还可以将参数传递给脚本。问题是,如果脚本失败(以0以外的其他东西退出),测试执行将继续并以SuccesFull结束。 我发现当脚本回显时,我可以作为脚本的结果访问它,这样我就可以回显退出值并对其进行断言(在一些可重用的特性中),但这似乎是一个变通方法,而不是一个有效的干净解决方案。有没

  • 我想在3个不同的节点上执行我的脚本 对于启动集线器,我使用命令:-java-jar selenium-server-standalone-2.53.0.jar-role hub-port 4444 和节点

  • 问题内容: 假设我在网址“ http://mywebsite.com/myscript.txt”处有一个包含脚本的文件: 而且我想先运行该脚本而不先将其保存到文件中。我该怎么做呢? 现在,我已经看到了语法: 但这似乎不像我保存到文件然后执行时那样。例如,readline不起作用,而输出仅为: 同样,我尝试过: 具有相同的结果。 最初我有一个解决方案,例如: 但这似乎草率,我想要一个更优雅的解决方案