Почему .profile (а не .bashrc) добавляет ~ / bin к пути?

9

Так .bashrcкак процедура «общего характера» (в том смысле, что .profileона ее берет), почему процедура «включить ~/binв путь» не находится внутри .bashrc? Почему бы пользователю не захотеть его в оболочке без входа в систему? (Особенно в наши дни, когда оболочки без логина более распространены *.)

Я знаю, что могу сделать такое изменение вручную, но я хочу знать, есть ли причина.

* не могу доказать это, но я думаю, что это так.

Борхес
источник

Ответы:

13

~/.bashrcи /etc/bash.bashrcзапускаются каждый раз, когда запускается интерактивная bashоболочка.

Напротив, ~/.profileи /etc/profileзапускаются каждый раз, когда запускается любая оболочка входа . Таким образом, это не обязательно должна быть bashоболочка, но она должна быть оболочкой входа (и многие bashэкземпляры оболочки не являются оболочками входа ).

  • bashОболочка представляет собой оболочку , где оболочка программы , которая обеспечивает это bash, а не какой - либо другой программы, например dash.
  • Оболочка входа в систему - это оболочка, которая запускается автоматически в результате входа в систему, чтобы обеспечить пользовательский интерфейс (графический или командную строку) для входа в систему. При выходе из оболочки входа в систему регистрация прекращается.

Следовательно, добавление комментария, который добавляет записи PATHв bashrcфайл:

  1. Ничего не делать, когда оболочки нет bash, что часто бывает. Например, PATHне будет изменено, когда вы находитесь в графическом сеансе входа в систему. Помните, PATHэто не просто используется программами командной строки.

  2. Добавляйте его снова и снова при наличии вложенных bashоболочек. Таким образом, если вы запускаете оболочку в оболочке - что является очень распространенным по разным причинам - тогда у вас будет несколько ~/binзаписей, размещенных на вашей PATH. Это PATHзатрудняет чтение переменной среды, а иногда и снижает производительность.

Это было бы нежелательно. Таким образом было бы неправильно поместить это в bashrcфайл; это действительно принадлежит ~/.profile. ~/.profileэто правильное место для:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Оболочки, не входящие в систему, имеют в качестве своих родительских оболочек (или что-то, что ведет себя как оболочка входа в систему) и наследуют большинство переменных среды, в том числе PATHот этой оболочки входа. Таким образом, введение команд изменения пути ~/.profileтребует, чтобы вы вышли из системы и снова вошли в нее, чтобы они были эффективными, но это также влияет на среду оболочек без регистрации (а также на среду для программ, которые не являются оболочками, поскольку каждая программа получает свою собственный набор переменных окружения - называемый его «средой» - унаследованный от его родительского процесса).

Элия ​​Каган
источник
Я понимаю. Но это решение все еще не имеет смысла для меня. Если открыть терминал прямо сейчас, он загружает только .bashrc, то я не смогу увидеть свой приватный бин.
Борхес
@borges Если конфигурация по умолчанию не работает для вас, вы можете смело ее менять. (В конце концов, это ваш компьютер. Или, по крайней мере, ваша учетная запись.) Но это звучит как разовая вещь. То есть, похоже, что ваш личный binкаталог не существовал при входе в систему и что вы создали его во время этого сеанса входа в систему. Если вы выйдете из системы и вернетесь обратно, она будет у вас PATH. Поскольку создание личного binкаталога - это то, что нужно сделать только один раз, это одноразовое неудобство.
Элия ​​Каган
3

Это потому, что традиционно переменные среды идут только в /etc/profileили .profile. bashrcФайл для вещей , как псевдонимы, оперативных настройки, опция оболочки и так далее (то есть вещей , которые относятся непосредственно к корпусу).

teppic
источник