Где определены переменные bash?

Где определены переменные bash?

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

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

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

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

решение1

Есть много мест, где это возможномогбыть определены.

Для полного объяснения вам нужно заглянуть на страницу 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то, что мне нужно.каждыйshell. Вам просто нужно убедиться, что последний не содержит никаких «накопительных» команд (вроде добавления чего-либо в конец пути).

Есть и другие способы настройки, особенно если вы используете разные оболочки и вам нужно совместно использовать профили между ними, но схема выше — самая простая из тех, что я нашел среди bashнастроек «только для -only».

Связанный контент