Чому .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Файл для речей , як псевдоніми, оперативних настройки, опція оболонки і так далі (тобто речей , які відносяться безпосередньо до корпусу).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.