【白说】终于搞懂环境变量了

848 阅读2分钟

简单来说就是系统中,可以全局运行的变量。

基础知识:

  1. 了解环境变量加载的配置文件 的顺序,分为系统级别+用户级别+用户级别的终端的:
    1. 系统级别:为/etc/开头,每个文件都会运行,所有用户登录都会加载。
    2. 用户级别:为~/ 开头,当且仅当该用户登录时会加载。有了排名前面的,后面的不再运行
    3. 用户级别的终端:用户实际使用的终端,没有排名挤掉的规则。查看终端类别:$ echo $SHELL
      1. 默认是bash,对应~/.bashrc
      2. 如果使用zsh,对应的配置文件 ~/.zshrc
      3. 如果使用其他终端,对应XXXX
  2. 明确自己安装的命令是否在环境变量中。
    1. 查看 实际加载的PATH路径。 echo $PATH

1.了解环境变量加载的配置文件 的顺序

配置文件加载顺序,以OS X系统为例:配置文件加载顺序为:

/etc/profile
/etc/paths
~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc

/etc/profile/etc/paths是系统级别的,系统启动就会加载, 后面几个是当前用户级的环境变量。

~/.bash_profile,~/.bash_login,~/.profile按照从前往后的顺序读取, 如果~/.bash_profile文件存在,则后面的几个文件就会被忽略不读了, 如果~/.bash_profile文件不存在,才会以此类推读取后面的文件。

比如:我新建了~/.bash_profile文件,使用RVM安装Ruby的环境变量配置在~/.profile文件中,这样就会导致打开的其他终端窗口Ruby升级失效,只要把配置代码拷贝到~/.bash_profile文件即可。 如果需要立即生效,执行:

> source ~/.bash_profile

~/.bashrc没有上述规则,它是bash shell打开的时候载入的。

PATH变量 设置PATH的语法为:

export PATH="$PATH:<PATH 1>:<PATH 2>:<PATH 3>:...:<PATH N>"

注: 1)环境变量更改后,重启后才可生效。如果想立刻生效,则可执行下面的语句:

$ source 相应的配置文件

2)如果默认shell是bash,那么shell启动时会触发.bashrc, 如果默认shell是zsh,那么shell启动时会触发.zshrc。

以下命令可以得到系统的默认shell:

$ echo $SHELL
/bin/zsh

2. 明确自己安装的命令是否在环境变量中

$ echo $PATH
/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

3. 案例: NPM 安装一个全局变量 nos-cli

npm安装该包的说明:www.npmjs.com/package/@xg…

1.首先确认npm全局安装包放的路径

使用 npm config list查看,prefix的路径。也就是说npm全局安装的就会放到这各文件(放到 /opt/homebrew/bin ) image.png 安装以后,也可以查看是否在这个目录下: image.png

2. 查看系统环境变量是否包含“/opt/homebrew”

image.png 如果有,那就ok了。

4.案例:新增 add环境变量

1. 如果系统PATH没有“/opt/homebrew”,把它加入环境变量的配置文件

从第一点 “了解环境变量加载的配置文件的顺序”,我们可以看到 文件加载的顺序为:

/etc/profile
/etc/paths

~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc

~/.zshrc
~/.zprofile

我通过echo $SHELL 知道目前使用的是zsh终端,对应的是 /.zshrc 、/.zprofile 等配置文件。让我们先看看这些文件中是否配置了:

  1. 直接 export PATH = xxxx
  2. source 指定路径

我们看下~/.zshrc文件,注意到下面这行: image.png 这里说明 oh-my-zsh.sh 里面也可以配置一些环境变量

扯远了,其实在~/.zshrc 文件头部,就有对PATH的描述: image.png 我们只要把 export PATH="/opt/homebrew/bin:$PATH" 加入在此处即可。

5.案例:M1芯片的homebrew,是如何把变量加入环境变量的?

我在官网成功安装homebrew后,brew.sh/index_zh-cn,只要使用brew安装的,都可以在终端顺利调用。 查看了 echo $PATH ,发现 image.png 说明它确实已经加到PATH中,但是它是在哪里加入的呢? 我查了

/etc/profile
/etc/paths
~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc
~/.zshrc

发现没有任何踪迹,网上有种说法是,homebrew自己创建了软连接,放到了/usr/local/bin ,显然这是错误的(以目前来看)。那么是在哪里配置了?

突然发现还有这个一个文件 ~/.zprofile,这应该和 ~/.bash_profile ~/.bashrc 是一样的,zsh终端提供了多种配置文件(同样起到配置效果),我在 ~/.zprofile中看到了: image.png 将这一行注释以后:就发现原来brew安装的命令都用不了了,$PATH也被除去了: image.png

终于找到配置的地方。

资料:www.jianshu.com/p/acb1f062a…