如何找到 Linux 中定义环境变量的位置

How do I find where the environment variables are defined in Linux

刚开始学习hadoop(CentOS7),请教一个关于环境变量的问题:

在我的虚拟机中,rxie 是登录用户: HADOOP_CONF_DIR = /opt/hadoop/hadoop-2.7.2/etc/rxie

没有/opt/hadoop/hadoop-2.7.2/etc/rxie的路径 应该是 /opt/hadoop/hadoop-2.7.2/etc/hadoop

我正在尝试找出变量的定义位置,以便我可以更正它。 这是我想出的:

bash-4.2# grep -r HADOOP_CONF_DIR ~/.*
/root/./.bashrc:export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

请注意 HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop 是正确的。

我没看到错误的 HADOOP_CONF_DIR 定义在哪里?

如有高人指教并提供解决方案,将不胜感激。

运行 如下:

PS4='+ $BASH_SOURCE:$LINENO:' BASH_XTRACEFD=7 bash -xlic "" 7>trace.out

完成后,运行:

grep HADOOP_CONF_DIR trace.out

每次设置 HADOOP_CONF_DIR 时输出都会显示,设置它的文件,以及该文件中的行号。

例子

让我们以我的 .bashrc 文件中的内容为例:

$ grep HISTFILESIZE trace.out
++ /home/john1024/.bashrc:193:export HISTFILESIZE=20000

这表明 ~/.bashrc 的第 193 行设置了 HISTFILESIZE

工作原理

此命令启动 bash 登录 shell 并打开诊断。 PS4 变量设置诊断输出的前缀,以便它包含文件名和行号。有关详细信息,请参阅 here

其他方法

虽然不太靠谱,但也可以试试:

grep HADOOP_CONF_DIR ~/.bashrc ~/.bash_profile ~/.profile /etc/profile.d/* /etc/profile /etc/bashrc