如何在 bash 脚本中调用“nvm use”,并在脚本执行后保留所选节点版本?
Posted
技术标签:
【中文标题】如何在 bash 脚本中调用“nvm use”,并在脚本执行后保留所选节点版本?【英文标题】:How can I call "nvm use" in a bash script, and have the selected node version retained after the script executes? 【发布时间】:2021-05-28 01:07:56 【问题描述】:对于需要从 Node.js 12 更新到 14 的构建过程,我想要一个 bash 脚本来检测是否安装了nvm
,如果是,请执行nvm use v14
(或nvm install 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的环境变量的。
然而,nvm
命令本身就是一个 shell 脚本,它所做的任何事情在执行完之后都是持久的。我也应该有办法实现这一点。
【问题讨论】:
【参考方案1】:我想如果你用 nvm 默认设置一个别名,
nvm alias default 14.0.0
节点版本将在任何新的终端实例中保持不变。
【讨论】:
在那里看起来不错...但遗憾的是,它没有用。 嗯……也许吧。如果我关闭我所在的终端,然后再次打开终端,那么新的默认值就会启动。这可能就足够了,只要从主脚本启动的另一个进程也继承了这个更改,而不退出原始终端。你至少应该为至少让我分道扬镳而投赞成票。 :) 你可以试试这里提到的选项 - ***.com/questions/47190861/…以上是关于如何在 bash 脚本中调用“nvm use”,并在脚本执行后保留所选节点版本?的主要内容,如果未能解决你的问题,请参考以下文章
每次目录中有 .nvmrc 文件时自动运行 `nvm use`
Bash 脚本:如何确保脚本在使用“或”(||) 条件调用的函数中出现任何错误时退出?
如何在 bash shell 脚本中的 perl 命令调用中使用 shell 变量?