簡體   English   中英

如何在 bash 腳本中調用“nvm use”,並在腳本執行后保留所選節點版本?

[英]How can I call "nvm use" in a bash script, and have the selected node version retained after the script executes?

對於需要從 Node.js 12 更新到 14 的構建過程,我想要一個 bash 腳本來檢測是否安裝了nvm ,如果是,請nvm use v14 (或nvm install v14 ,如果需要),然后我想要在 bash 腳本終止后, nvm-selected 節點版本將保持在 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 function 腳本的前三行用於設置腳本,並且nvm用於設置腳本

output 是:

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 腳本,無論它做什么,在它執行完成后都是持久的。 我也應該有某種方法來實現這一點。

我想如果你用 nvm 設置一個別名作為默認值,

nvm alias default 14.0.0

節點版本將在任何新的終端實例中持續存在。

要在腳本執行后選擇節點版本,您可以像這樣運行它:

. change-node-version.sh

腳本

node --version
nvm use 14.18.0
node --version

輸出

然后:

node --version
➜  v14.18.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM