通俗的讲,环境变量就是告诉电脑 (实际是操作系统)几个目录。这几个目录下存储几个执行文件,如前面显示的/usr/bin目录,大部分的系统命令都在这个目录下。
当我们输入命令mkdir时,系统就会在环境变量所代表的几个目录从前到后去查找,哪个里面有mkdir文件,然后去执行mkdir命令。
系统中环境变量的名字是PATH,其内容可通过下面的命令显示 (根据操作系统不同和配置不同,略有差别,但格式是统一的,:分割的一堆路径)
$ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
所以如果我们想让自己的命令能被系统找到,就需要把命令所在的目录加到环境变量里面,怎么操作呢?
加到环境变量的路径必须是全路径,全路径指以/开头或以~开头的路径。
# 注意第一个PATH不含$, 第二个PATH有$符号 $ export PATH=$PATH:/home/ct $ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ct
所以在以后安装了新的软件,或者写了新的脚本后,都把软件的可执行程序和可执行的脚本所在的目录,加到环境变量里面就可以了。
但是,在命令行中执行export,对环境变量所做的修改,只对当前终端有效,退出后就无效了。为了使得这一操作长期有效,我们需要把这句话写入一个文件中,一个登陆服务器就会被自动读取的文件中。
对于普通用户,在远程登录终端时,家目录下的~/.bash_profile (不是~/.bashrc)会自动被读取,所以我们需要把export语句加入到这个文件中。
# 这是我的~/.bash_profile中的内容,主要是最后一行。可以连续的加入多个路径。 if [ -f ~/.bashrc ]; then . ~/.bashrc fi if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases fi export PATH=$PATH:/home/ct:/home/bin:/home/soft/bowtie2/bin
前面提到,系统查找命令的顺序是从环境变量的第一个目录到最后一个目录,在第一次碰到查询的命令后,就调用执行。假如系统存在一个python命令,我们自己又安装了一个python (假如在/home/ct/anaconda/bin目录下),如果我们想执行自己的python程序,就需要把/home/ct/anaconda/bin写在$PATH前面,如下
# 注意$PATH的顺序 $ export PATH=/home/ct/anaconda/bin:$PATH
至此,我们可以熟练使用环境变量来简化命令的输入过程了,因为如果没有环境变量,我们就得需要运行/home/ct/anaconda/bin/python来运行python命令了