是否可以找出哪些文件正在设置/添加到环境变量及其优先顺序?

是否可以找出哪些文件正在设置/添加到环境变量及其优先顺序?

我的一些环境变量($PATH以及$MANPATH朋友)部分设置在不同的源文件中。

我发现自己希望有一个命令或方法来快速收集哪一部分,在特定的环境变量中,来自什么文件

例如,我的 $PATH 显然已在.bashrc, /etc/paths, /etc/paths.d/X11… 中设置(添加到),并且我仍在寻找最后一个神秘文件,该文件在我的$PATH.

手动查明对环境变量有贡献的文件需要花费很长时间。一定有一种有用的方法来绕过追踪所有设置者的这种不必要的劳动……或者我是唯一一个这么想的人?

答案1

通常PATH由登录的程序以高度依赖于系统的方式设置为初始值(pam_env是一个共同的贡献者),然后/etc/profile它们~/.profile包含的文件继续修改该值。

PATH删除对in 的任何更改.bashrc,环境设置不属于.bashrc: 请参阅.bashrc 和 .bash_profile 之间的区别

首先尝试以文本模式登录(例如使用ssh localhost),因为会话启动比图形模式简单得多。

放在andset -x的开头。 shell 将在其标准错误流上打印其所做操作的跟踪信息;在跟踪中查找分配。/etc/profile~/.profilePATH

环境变量分配没有优先权的概念:最后分配的人获胜。

答案2

您的 PATH 可以设置在任何地方,而不仅仅是在 .bashrc 文件中。您的系统很可能有一个文件, /etc/profile和/或/etc/profile.local它为系统上的所有用户设置默认路径。如果用户特定的更改或添加不在您的文件中,则可能会在您的.profile文件中进行设置.bashrc,或者您可能只是使用系统上的默认值。

如果您想要进行仅影响您的更改,我会.profile使用以下表格将它们放入您的中:

export PATH=/new/directory:$PATH

从而编辑当前路径而不是完全重写它。

man bash这里.profile) 解释了和.bashrc等之间的区别,以及在您登录或启动 shell 时读取哪些其他文件以及读取的顺序。

答案3

不太可能存在这种机制。想想有多少种方法可以在 shell 中更改 env 变量的值。

不过,你可能会有一些运气set -x

相关内容