Mac的環境變數和nvm的使用
- Home
- Programming >Assorted
- Mac的環境變數和nvm的使用
文章目錄
前言
今天在學習正則表示式,在測試零寬度正回顧後發斷言
的時候,我發現node
提示我正則表示式錯誤,於是我去chrome
上試了一下,沒問題。之後google
發現,ES2019
才開始支援零寬度正回顧後發斷言
,但是既然chrome
已經支援了,沒道理nodejs
不支援,而且我看文件裡也說了v8
已經支援。於是我猜測我的node
版本應該是過低了。
更新node
因為之前在家一直用的桌上型電腦,這臺mac
上的東西很久沒更新了,node
的版本停留在8.11.0
,於是著手更新,先把nvm
更新了一下,安裝了最新的v11.13.0
,但是在nvm alias default v11.13.0
之後,發現雖然default
已經變成最新版本,但是指標依然指向system
。
google
之後在github
的issue
裡發現有人提了同樣的問題,最後得出的結論就是在nvm
的環境變數之後,又把系統原來的node
在環境變數中寫了一遍,也就是nvm
的default
又被系統的覆蓋了,我開啟~/.bash_profile
看了一下,果然nvm
的source ~/.nvm/nvm.sh
寫在了最前面,後面緊跟著export PATH=/usr/local/bin:$PATH
也就是我係統node
的位置,把nvm
的位置移動了一下就一切正常了。
Mac的環境變數
我們在系統中安裝了某個程式,就可以使用這個程式對應的命令,之所以會這樣是因為我們把該命令新增到了系統的環境變數中,也就是我們輸入對應的命令,系統知道到哪個路徑去找對應的檔案執行。比如在Windows
中我們在path
中新增jdk
和jre
的bin
路徑,我們在命令列中就可以使用java
和javac
命令了。
Mac
中同樣需要設定環境變數,但是情況要比Windows
中複雜一些,Mac
中又多個環境變數檔案,不同的環境變數檔案的作用域和載入時間也不同。而且不同的Shell
所對應的配置檔案也不同。比如Mac
預設的bash
對應的配置檔案就是.bash_profile
,而zsh
對應的配置檔案就是.zshrc
。
rc
即為run command
,一般為指令碼類檔案的字尾,這些指令碼通常在程式啟動的時候被呼叫,比如.bashrc
就會在bash shell
啟動時呼叫。
Mac
中環境變數配置檔案的預設載入順序如下:
/etc/profile /etc/bashrc /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc
其中/etc/profile
/etc/bashrc
和/etc/paths
是系統級環境變數,對所有使用者都有效。但它們的載入時機有所區別:
-
/etc/profile
任何使用者登陸時都會讀取該檔案 -
/etc/bashrc
bash shell
執行時,不管是何種方式,讀取此檔案 -
/etc/paths
任何使用者登陸時都會讀取該檔案 -
.profile 為系統的每個使用者設定環境資訊,當用戶第一次登入時,該檔案被執行.並從
/etc/profile.d
目錄的配置檔案中搜集shell
的設定。 如果你有對/etc/profile
有修改的話必須得重啟你的修改才會生效,此修改對每個使用者都生效。 -
./bashrc
每一個執行bash shell
的使用者執行此檔案。當bash shell
被開啟時,該檔案被讀取。 對所有的使用bash的使用者修改某個配置並在以後開啟的bash
都生效的話可以修改這個檔案,修改這個檔案不用重啟,重新開啟一個bash
即可生效。 -
./bash_profile
該檔案包含專用於你的bash shell
的bash
資訊,當登入時以及每次開啟新的shell
時,該檔案被讀取.
除了前三個,後面幾個是當前使用者級的環境變數。macOS 預設使用者環境變數配置檔案為~/.bash_profile
,Linux 為~/.bashrc
。
如果不存在~/.bash_profile
,則可以自己建立一個~/.bash_profile
。
如果~/.bash_profile
檔案存在,則後面的幾個檔案就會被忽略。
如果~/.bash_profile
檔案不存在,才會以此類推讀取後面的檔案。
如果使用的是Shell
型別是zsh
,則還可能存在對應的/etc/zshrc
和~/.zshrc
。任何使用者登入zsh
的時候,都會讀取該檔案。某個使用者登入的時候,會讀取其對應的~/.zshrc
。
新增新的環境變數
新增環境變數的語法:export PATH="$PATH:<PATH 1>:<PATH 2>:<PATH 3>:...:<PATH N>"
$PATH
相當於原來的環境變數,後面的PATH 1``PATH2
就是我們新新增的變數,不同於Windows
用分號分隔,這裡是用冒號分隔。$PATH
可以放在前面,也可以放在後面,放在前面相當於把新的環境變數加在了環境變數的末尾,而放在後面則相當於把新的環境變數加在了開頭。比如我上面的nvm
的問題,除了把nvm
的配置放到後面,把export PATH=/usr/local/bin:$PATH
改為export PATH=$PATH:/usr/local/bin
應該也是可以解決的,不過/usr/local/bin
中的檔案較多,還是動nvm
比較好。
檢視path
:echo $PATH
。
nvm的常用命令
nvm ls-remote
:檢視當前支援的版本,LTS
會特別標註,選擇自己需要的版本安裝。
nvm install v~
:安裝對應版本的node
,nvm instal node
會安裝最新版本。
nvm
安裝的node
路徑為~/.nvm/versions/node
.
nvm use
: 切換當前環境使用的node
版本,關閉當前的shell
以後失效。
nvm current
:檢視當前環境正在使用的node
版本。
nvm alias default v~
:指定預設版本,關閉環境後仍然有效。
nvm use node
:切換到當前安裝的版本中最新的。
nvm alias xxx v~
:為某個版本設定別名。
nvm unalias xxx
:取消設定的別名。
總結
環境變數是每個作業系統關鍵的部分,搞清楚不同系統的環境變數規則在遇到軟體出現異常時能夠第一時間找出原因。nvm
的使用是相當方便的,多個版本之間互不影響,相當於在自己的沙盒中,我自己是認為比n
好用的。之前一直在CentOS
上,許久不用emacs
,已經快忘記怎麼用了,Mac
上能夠配置emacs client
還是挺方便的,等過段時間有空閒了把emacs
拿出來好好練一練。