
Как найти файл, в котором определена переменная 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».