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

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

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

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

9
задан 8 April 2013 в 21:07

2 ответа

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

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

  • A bash оболочка является оболочкой, где программная оболочка, которая обеспечивает ее, bash, вместо некоторой другой программы, такой как dash.
  • Оболочка входа в систему является оболочкой, которая запускается автоматически в результате входа в систему, для обеспечения пользовательского интерфейса (графическая или командная строка) для входа в систему. Когда из оболочки входа в систему выходят, вход в систему завершается.

Поэтому помещая рекомендование, которое добавляет записи в PATH в a bashrc файл был бы:

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

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

Они были бы нежелательным. Таким образом было бы неправильно поместить это в a 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 требует, чтобы Вы вышли из системы и въехали задним ходом, чтобы они были эффективными, но это влияет на среду оболочек невхода в систему также (а также среда для программ, которые не являются оболочками, так как каждая программа добирается, ее собственный набор переменных среды - назвал ее "среду" - наследованной от ее родительского процесса).

13
ответ дан 8 April 2013 в 21:07

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

0
ответ дан 8 April 2013 в 21:07

Другие вопросы по тегам:

Похожие вопросы: