本篇继上一篇文章,是关于安装了zsh后,在终端mvn命令不能使用的问题。
刚开始装maven时,我们会把mvn的环境变量配置在~/.bash_profile文件中,而当你安装zsh后,会发现mvn命令不起作用了,好像没有装一样。其原因还是在启动linux或终端时各个配置文件的先后加载问题及作用域问题。先来看如何解决上面的问题:
先打开.zshrc文件,加入mvn的环境变量配置,如下图:
然后按esc键后,输入命令:wq进行保存退出,记住冒号不可少。重启终端,会发现mvn命令可用。
那为什么会出现这种原因呢,是因为这些系统文件会存在一个优先执行顺序,首先在登录时,先执行的是/etc/profile文件。
然后在启动用户目录下的~/.bash_profile、~/.bash_login或~/.profile文件中的其中一个,执行顺序为~/.bash_profile、~/.bash_login、~/.profile。如果~/.bash_profile文件存在的话,一般还会执行~/.bashrc文件。若要退出shell时还会执行~/.bash_logout文件。
所以不难发现,当在zsh下执行各项命令时,此时~/.zshrc文件则已经执行呢。而~/.bash_profile文件没有执行,所以在其中配置的mvn参数不会加载。其实有两种方法可以解决,一种是楼主上面操作的方法,还有一种与第一种类似,就是在~/.zshrc文件中加入source ~/.bash_profile命令即可。原理都是一样,即是在执行zsh相关的文件时会加载到mvn的相关配置。
简单介绍一下各个文件的作用域:
(1)/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2)/etc/bashrc:为每一个运行bash shell的用户执行次文件。当bash shell被打开时,该文件被读取。
(3)~/.bash_profile:每个用户都可以使用该文件输入专用与自己使用的shell信息,当用户登录时,该问价仅仅执行一次,默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
(4)~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该 文件被读取。
(5)~/.bash_logout:当每次退出系统时(退出bash shell),执行该文件。另外,/etc/profile中设定的变量可以作用于任何用户,而~/.bashrc等中设定的变量只能继承/etc/profile中的变量,是“父子”关系。
(6)~/.bash_profile是交互式、login方式进入bash运行的~/.bashrc是交互式non-login方式进入bash运行的通常二者设置大致相同,所以通常前者会调用后者。