bash 变量在哪里定义?

mah*_*ood 4 linux bash

如何找到在那里定义了 bash 变量的文件?

假设echo命令显示

$ echo $DB_ROOT
/home/mahmood/db-4.0
Run Code Online (Sandbox Code Playgroud)

现在,我怎样才能找到在那里定义了这个变量的文件?我不得不说我没有在~/.bashrc.

小智 8

有大量的地方的地方可以被定义。

要获得完整的解释,您需要查看 下的bash联机帮助页,INVOCATION但我必须警告您,在您弄明白这一切之前,它可能会让您头疼:-)

根据 shell 的调用方式和存在的文件,它可能是以下一项或多项:

  • /etc/profile.
  • /etc/bash.bashrc
  • ~/.bash_profile.
  • ~/.bash_login.
  • ~/.profile.
  • ~/.bashrc.
  • --rcfile选项指定的任何内容。
  • 使用BASH_ENV环境变量指定的任何内容。
  • 使用ENV环境变量指定的任何内容。
  • 从前面的文件调用的任何文件。

对于它的价值,我通常确保我有一个~/.bash_profile(因为这是集合的最高优先级{~/.bash_profile, ~/.bash_login, ~/.profile}- 它只会处理它在该组中找到的第一个)。

我还确保我拥有~/.bashrc~/.bash_profile在最后找到它。

这样,~/.bash_profile在登录 shell 中只保存我需要的东西,并~/.bashrc每个shell 中保存我想要的东西。你只需要确保后者不包含任何“累积”命令(比如在路径的末尾添加一些东西)。

还有其他设置方法,特别是如果您使用不同的 shell 并且必须在它们之间共享配置文件,但上面的方案是我在bash-only 设置中找到的最简单的方案。