通过NVM设置Node版本,缺失则自动安装的Shell脚本问题
解决nvm在bash profile中切换Node版本的问题
问题a解答:无法让$(nvm use v6.9.1)在当前shell运行
你说得没错,$(...)这种命令替换语法必然会创建子shell来执行里面的命令——子shell的环境变量修改完全不会传递回父shell,所以不管怎么调整,用$(nvm use ...)的方式都没法让当前shell切换Node版本,这是语法本身的特性,没法绕过。
问题b解答:更可靠的实现方式
其实nvm本身提供了检查版本是否安装的官方命令,我们可以用这些命令来判断,完全避开子shell的问题。推荐的脚本写法如下:
# 先加载nvm的初始化脚本 . /usr/local/opt/nvm/nvm.sh # 检查v6.9.1是否已安装,&>/dev/null用于丢弃所有输出和错误信息 if ! nvm which v6.9.1 &>/dev/null; then # 如果版本不存在,自动执行安装 nvm install v6.9.1 fi # 在当前shell直接切换到目标版本(无任何子shell,环境变量修改会生效) nvm use v6.9.1
为什么这个写法更优?
- 彻底解决子shell问题:
nvm use直接在当前shell执行,环境变量修改会直接作用于当前会话 - 判断逻辑更稳定:
nvm which <version>是nvm官方提供的检查命令,版本不存在时会返回非零状态码,比捕获nvm use的输出更可靠(毕竟nvm的提示文本可能随版本更新变化) - 流程清晰易维护:先检查安装状态,再切换版本,逻辑一目了然
另外补充一个实用小技巧:如果你希望每次打开shell都默认使用这个版本,可以在安装成功后设置默认别名,这样后续打开shell会自动加载该版本,连nvm use都省了:
. /usr/local/opt/nvm/nvm.sh if ! nvm which v6.9.1 &>/dev/null; then nvm install v6.9.1 # 将v6.9.1设置为默认版本 nvm alias default v6.9.1 fi
内容的提问来源于stack exchange,提问作者pez
相关产品推荐
相关产品推荐

