快捷搜索: 王者荣耀 脱发

/etc/profile文件使用source不能全局生效的解决方法

我原本想着不写的,但是最近的几次国产化系统(Kylin,OpenEuler),包括部分centOS和Ubuntu部署系统的时候都出现了这个情况,我还是写一写吧。

按道理来说,每次部署系统的时候,执行source /etc/profile这个命令的话,我对应配置的环境变量理应全局生效的。

在这几个系统中,/etc/profile中添加环境变量后,是使用source /etc/profile编译后只能在当前终端生效;重新开启一个终端后,该环境变量失效。

可以看到,这个图就是我新开的终端,直接执行which java直接就落到了系统的预装的java上。这个java很明显就不是我要的那个版本。

我之前也部署过若干系统,这个问题按道理来说是不会出现的,结果现在出问题了!就离谱!

解决办法奉上:

直接在root权限下,执行这个命令

[root@localhost 1.8.0_333]# vim ~/.bashrc

在文件的最后添加这个内容:

source /etc/profile

然后保存退出

再执行一次source /etc/profile

这个问题就解决了

具体的原因,我后来花了很长时间分析了下,应该是这样的,仅供参考:

环境变量设置方法的思路是这样的:

1、/etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件。这个文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。

2、/etc/environment:在登录时操作系统使用的第二个文件。系统在读取profile前,设置环境文件的环境变量。但是这个文件我看了下,是空的。也就是说,系统不读取这个里面的东西了。

3、~/.bash_profile:在登录时用到的第三个文件是.profile文件。每个用户都可使用该文件输入专用于自己使用的shell信息。当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。

/etc/bashrc;为每一个运行bash shell的用户执行此文件。当bash shell被打开时,该文件被读取。

4、~/.bashrc:该文件包含专用于当前使用用户的bash shell的bash信息,当该用户登录时,每次打开新的shell时,该该文件被读取。

这几个环境变量的优先级是:1>2>3

source命令也称为“点命令”,也就是一个点符号(.),是bash的内部命令。

功能:使Shell读入指定的Shell程序文件并依次执行文件中的所有语句

source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。

经验分享 程序员 微信小程序 职场和发展