环境变量
打印环境变量
环境变量就是程序运行时的一系列静态参数,程序在运行时无法修改。
想要查看所有环境变量,可以使用这个命令:
|
|
打印单个环境变量
几个比较常见的环境变量。
变量名 | 说明 |
---|---|
PATH | shell将会去这里搜寻命令和程序 |
SHELL | 当前使用的shell类型 |
HOME | 当前用户的根目录 |
LOGNAME | 当前用户的登录名 |
|
|
定义环境变量
这是 Go 语言的一个环境变量配置。~/.bashrc
中添加下面几行。
|
|
保存退出后,就可以使用 echo $GOROOT
打印出来了。
在一个目录下创建
.env
文件,并写入:
1
GOROOT /usr/local/Cellar/go/1.13.5/bin
可以让这个环境变量仅对在当前目录下运行的应用程序生效。
更改环境变量的值
有一个比较特殊的环境变量 $PATH
,它是环境变量的一个路径集合,既然是集合就可以被不断添加。
$PATH
以 :
分割,以 path/to/first:path/to/second
这样的形式存在。
|
|
上面的命令相当于执行了一个 +=
操作。也就是在原先的 $PATH
的基础上加上了 $GOROOT/bin
。
Shell 配置文件
多用户配置
在 unix-like 系统中,系统配置文件都被放在一个叫 /etc
的目录下。其中也包含了 shell 配置文件。
shell 配置文件可以分为两类: *profile
和 *shrc
。
*profile
中的内容会在用户登录时被运行。
*shrc
会在 shell 启动时被运行。
从生命周期的角度讲,写在 *profile
中的环境变量的生命周期是整个系统运行期间,而 *shrc
仅仅在 shell 被启动的时候才有效。
生命周期长不一定好,因为我们可能不希望操作系统做太多的初始化而导致开机变慢,所以大部分我们用户自定义的环境变量都是在 *shrc
中。
但是有些软件,需要他们一开机就运行,比如输入法,就需要写在 *profile
中。
|
|
因为我安装了 zsh,所以多了
zprofile
和zshrc
,没安装过其他的 shell,只有默认的 bash 的话,应该只有profile
和bashrc
。
除此之外,忘记说了一点,/etc
文件夹下的配置是针对全部操作系统的用户的,所以请谨慎修改。
单用户配置
上面说了多用户的环境变量配置,单用户的配置应该使用.bashrc
和 .bash_profile
,它们在用户的根目录(~
)下,默认是不创建的,如果需要则自己创建。
|
|
我这里给 bash 创建了 profile,而给 zsh 创建了 shrc,其他没创建。
值得注意的是,.bash_profile
在默认状态下,还会执行 .bashrc
。
环境变量的优先级
如果在 etc/profile
中和 ~/.bash_profile
都定义了相同的名字的环境变量,会发生什么?
这个问题,我们可以从配置文件被加载的顺序来考虑。
以 bash 为例。
- 操作系统启动的时候,
/etc/profile
被调用,然后/etc/profile
调用/etc/bashrc
。 - 用户启动 shell 的时候,
~/.bash_profile
被调用,然后~/.bash_profile
调用~/.bashrc
。
最后被调用的会覆盖前面被调用的。
补充
export 命令
export
命令就是设置环境变量。分两个场景来看:
在命令行下
在命令行下的
export
的作用域只有在这次登录期间。也就是说
shell
一旦退出,设置的环境变量就消失了。如果想要它一直存在,就要写到配置文件中。
在配置文件中
如果仔细看过上面的分析,就会知道配置文件是在
shell
登录时候自动加载的。自然就不会消失了。
source 命令
配置文件写入之后,环境变量不会马上更新。
source
命令可以加载一次配置文件的内容。
比如,配置完上面的内容,使用 source
:
|
|
alias 命令
alias
就是别名,也就是为命令创建一个别名。
比如,在 linux
中,python
往往默认是 python2
。
使用 alias
可以设置成 python3
。
|
|
alias
也可以当成 export
用。
区别在于,export
可以直接导入一个文件夹下面的全部可执行文件。
而 alias
只能针对一个可执行文件,需要你一个一个写。
|
|
这样之后,我们每次用 mysql
的命令,就会被替换成 /usr/local/mysql/bin/mysql
。
alias
略微简洁明了一点,但其实优势并不是很大,一般都推荐用 export
。