在$HOME/.bashrc中配置PATH环境变量后source不起作用,必须重新登录的原因

问题起因

在玩Ubuntu时一不小心把文件夹Hadoop-2.9.1给删除了一部分,我需要重新下载和配置Hadoop-2.9.1,重新下载后的Hadoop-2.9.1解压到了~/hadoop/hadoop目录下,与之前的Hadoop-2.9.1放在同一个父目录下,如下:
在$HOME/.bashrc中配置PATH环境变量后source不起作用,必须重新登录的原因_第1张图片
然后在$HOME/.bashrc中配置HADOOP的环境变量,如下
这里写图片描述
最后执行如下命令

source ~/.bashr
start-dfs.sh

发现调用的还是Hadoop-2.9.1/sbin下的start-dfs.sh命令,与预期结果不符(预期结果是调用到hadoop/hadoop/sbin下的start-dfs.sh)

问题原因和解决方法

出现问题时我通过echo $HADOOP_HOME发现在.bashrc配置的环境变量已经生效了,再输出PATH环境变量的值如下:
在$HOME/.bashrc中配置PATH环境变量后source不起作用,必须重新登录的原因_第2张图片
发现PATH环境变量中即有Hadoop-2.9.1也有Hadoop,就其原因是因为在用户登录时已经执行了一遍$HOME/.bashrc,此时会将之前的Hadoop-2.9.1的环境变量也加载到PATH中,新配置Hadoop和.bashrc后,再重新加载.bashrc,由于PATH环境变量中已经包含了Hadoop-2.9.1的环境变量,导致重新加载后的PATH也包含Hadoop-2.9.1。在我的配置方法下,由于Hadoop-2.9.1的环境变量在Hadoop的前面,按照Linux搜索命令的模式,当然先搜索到Hadoop-2.9.1下的start-dfs.sh命令。重新登录之所以可以是因为重新登录时PATH环境变量中没有Hadoop-2.9.1的环境变量。
知道问题原因后,就好解决问题了,如下:
这里写图片描述

总结

像这类问题并不复杂,只要耐心分析,理解Linux搜索命令的方式,通过各种命令输出信息,可以很容易解决。

你可能感兴趣的:(linux)