1. 添加环境变量
环境变量这个东西,大家应该不陌生,但是对于初步解除计算机的同学而言,或许是个让人头疼的东西。
为什么有时候需要设置环境变量呢?
回顾一下我们的编程经验。在我们开发好程序之后,首先要对程序进行编译(编译和链接),生成可执行文件。我们运行这个可执行文件的时候,通常我们的做法是,先进入到这个可执行文件所在的目录中,再运行。如果没有进入到这个目录,由于你的终端找不到可执行文件,就无法运行这个程序。
不进入到该目录就一定无法运行么?前边说,终端找不到这个程序,那么我们如果告诉终端怎么去找,是不是就可以了呢?答案是肯定的。我们设置环境变量,其实就是在告诉终端去哪里寻找我们需要的程序。这样,就不需要每次都进入到可执行文件存放的目录中去了。其实,我们安装的很多大型软件,和我们自己开发的很简单的程序本质上没有什么差别,无非规模大小、复杂程度不同,可能很多程序在源码的基础上做了一些打包。安装的很多大型软件,也有存放诸多可执行文件的目录,只不过大部分人很少去在意它存放在哪里,而且他们的文件结构可能会很复杂,如果不设置环境变量,我们就无法流畅的使用软件所提供的服务。
在开发的过程中,经常会有需要添加环境变量的地方,大家可能会遇到过这种情况:已经添加过环境变量,但是在(关闭后)重新打开终端的时候,这些环境变量又失效了,需要重新添加。如下所述:(以使用PostgreSQL为例,可以推广至其他类似应用场景)。电脑中已经安装了PostgreSQL,想在终端中通过客户端连接命令psql
连接到数据库,但是在执行的时候会遇到如下图所示找不到命令的情况。
安装了数据库但是无法使用psql命令,这是因为没有配置环境变量的缘故。在无论在其他Linux操作系统还是Mac,使用终端的时候,我们执行的命令,都是一些可执行文件(或者它们的软连接),想要能够直接使用这些命令,就需要将这些可执行文件的存储路径添加到$PATH中,也就是设置PATH环境变量。通常可以将新的可执行文件路径添加到PATH中,这种适用于可执行文件不多的情况;也可以在原有的PATH目录下,添加一个软链接,指向新的可执行文件,这种适用于可执行文件比较少的情况。这里由于PostgreSQL中的工具较多,因此是采用直接将添加环境变量的方法:
export PATH=$PATH:/Library/PostgreSQL/13/bin
#这里的安装路径视个人安装情况而定
之后在终端输入echo $PATH
可以看到当前路径的环境变量中已经有了刚才添加的部分。
于是,带着激动喜悦的心情,在终端敲下一串命令:
psql -h localhost -p 7263 postgres postgres
#这是连接PostgreSQL数据库的方法,和MySQl的类似,-h参数接主机,-p接端口号,随后是数据库名和用户名
Bingo!成功进入数据库!
问题似乎是解决了,但是再次打开终端,相同的情况又出现了,熟悉的Command not found
……配置好的环境变量似乎失效了。
2.为什么之前配置的环境变量失效了呢?
回顾之前了解到的添加环境变量的方法:
1
.直接使用export命令,就像上边的一样,但是这种设置的只是临时的环境变量,一旦终端关闭,再重新打开之后就失效了。有些环境变量我们只是暂时需要,可以设置为临时的,设置完我们就不用再考虑删除环境变量的问题,关闭终端它就自动失效了。上述出现的问题就是这种情况。
2
.更改相关文件,如profile
、.bashrc
、.zshrc
等。将需要设置的环境变量写入相关文件(视具体情况而定,不同机器可能会有所不同,如centos中一般为.bashrc),再重启终端或者使用source命令重新执行一下对应文件,之后每次终端启动时,都会自动检测并使用文件中添加的环境变量。这种方法设置的环境变量是永久的。
这就给我们提供了一种更为稳定的解决方案:
#在终端输入以下命令
vi .zshrc
#在2020款Mac中,zsh的配置文件是.zshrc
#之后在文件中添加下一行内容
export PATH=$PATH:/Library/PostgreSQL/13/bin
#之后每次打开终端,环境变量都会生效
3. 关于Mac中的shell版本不同,终端使用的配置文件也有差异,修改对应的文件即可
从 macOS Catalina 版(Mac OS10.15,2019年10月正式上线)开始,Mac 将使用 zsh 作为默认登录 Shell 和交互式 Shell,在此之前,Mac中使用的默认shell是bash。所以目前只有系统Catalina和其之后的Big Sur默认shell为zsh。这也就不难解释很多前辈给的解决方案是在设置环境变量
export PATH=$PATH:/Library/PostgreSQL/13/bin
之后执行
echo ‘source ~/.bash_profile’ >> ~/.zshrc
这里的.bash_profile
也可能是.bashrc
或.zprofile
。执行完该条语句之后,我们会发现.zshrc文件的最后多了source ~/.bash_profile
,这样每次zsh启动都会执行这条语句。
通常很多Linux中的终端默认的shell
是bash
,这种shell对应的配置文件名往往是.bashrc
,当然,如果我们想,我们也可以安装zsh。在我的2020款Mac中已经找不到bash相关的配置文件了,所以这个解决方案无法适配以zsh作为默认shell的Mac。在较新版本的Mac中,打开.zshrc文件,在其中添加环境变量即可。
这里,我们使用系统中已有的配置文件,是为了方便进行管理,其实,我们也可以自己创建配置文件,自己命名,在我们使用的时候,使用前述的source
命令,激活即可。通常使用以点.
开头的文件,是因为这种文件通常会隐藏起来,可以防止无意间修改或者删除掉,有一定的保护作用。使用多了,我们就会发现,在Linux中不像windows中一样,文件的查看、使用,不受那么多后缀名或者说是文件格式的限制。查看和修改,也都极为方便。例如:
# 创建自己的配置文件,名为my.profile,这里默认在用户主目录下,如有变动,相应修改即可
touch my.profile
# 添加环境变量,
echo 'export PATH=$PATH:/Library/PostgreSQL/13/bin' >> my.profile
# 此时,文件中已经有了环境变量,使其生效
source my.profile
# 但是,它也只会在当前的会话窗口中生效
# 想要每次启动都会生效,我们需要将这些环境变量间接添加到默认终端启动生效的配置文件
echo 'source my.profile' >> .zshrc
4. 总结
在添加环境变量时,我们应当注意我们是需要临时使用这些变量还是永久使用;如果是永久的,我们需要根据自己电脑的实际情况(如shell版本情况)作相应的更改。