Mac的环境变量和nvm的使用

Clloz · · 59次浏览 ·

前言

今天在学习正则表达式,在测试零宽度正回顾后发断言的时候,我发现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之后在githubissue里发现有人提了同样的问题,最后得出的结论就是在nvm的环境变量之后,又把系统原来的node在环境变量中写了一遍,也就是nvmdefault又被系统的覆盖了,我打开~/.bash_profile看了一下,果然nvmsource ~/.nvm/nvm.sh写在了最前面,后面紧跟着export PATH=/usr/local/bin:$PATH也就是我系统node的位置,把nvm的位置移动了一下就一切正常了。

Mac的环境变量

我们在系统中安装了某个程序,就可以使用这个程序对应的命令,之所以会这样是因为我们把该命令添加到了系统的环境变量中,也就是我们输入对应的命令,系统知道到哪个路径去找对应的文件执行。比如在Windows中我们在path中添加jdkjrebin路径,我们在命令行中就可以使用javajavac命令了。

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 shellbash信息,当登录时以及每次打开新的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比较好。

查看pathecho $PATH

nvm的常用命令

nvm ls-remote:查看当前支持的版本,LTS会特别标注,选择自己需要的版本安装。
nvm install v~:安装对应版本的nodenvm 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拿出来好好练一练。


Clloz

人生をやり直す

发表评论

电子邮件地址不会被公开。 必填项已用*标注

我不是机器人*

EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00