我该如何在 bash 脚本中调用 "nvm use",并在脚本执行后保留所选的 Node 版本?
我该如何在 bash 脚本中调用 "nvm use",并在脚本执行后保留所选的 Node 版本?
对于一个需要从 Node.js 12 更新至 14 的构建过程,我想要一个 bash 脚本来检测是否安装了 nvm
,如果是,则运行 nvm use v14
(或者如果必要的话是 nvm install v14
),然后我希望在 bash 脚本终止后 nvm 选择的 node 版本坚持在 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 脚本,无论它做了什么,在执行完成后都是持续的。我应该也有办法让这个发生。
admin 更改状态以发布 2023年5月20日