4

Как я могу найти файл, в котором определена переменная bash?

Предположим, команда echo показывает

$ echo $DB_ROOT
/home/mahmood/db-4.0

Теперь, как я могу найти файл, в котором определена эта переменная? Я должен сказать, что я не определил это в ~/.bashrc .

1 ответ1

8

Есть большое количество мест, где это можно определить.

Чтобы получить полное объяснение, вам нужно взглянуть на man- страницу bash разделе INVOCATION , но я должен предупредить вас, что, вероятно, у вас будет головная боль, прежде чем вы все это выясните :-)

В зависимости от того, как вызывается оболочка и какие файлы существуют, это может быть один или несколько из:

  • /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 содержит только то, что мне нужно для входа в оболочку, а ~/.bashrc содержит то, что мне нужно в каждой оболочке. Вам просто нужно убедиться, что последний не содержит никаких "кумулятивных" команд (например, добавление чего-либо в конец пути).

Существуют и другие способы его настройки, особенно если вы используете разные оболочки и должны обмениваться профилями между ними, но приведенная выше схема является самой простой, которую я нашел в настройках bash only.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .