bashдіє по-різному, чи це оболонка, чи звичайна мова програмування (як-от perlабо python).
За дизайном, налаштування в ~/.bash_profile, ~/.bashrcі т. Д. Призначені для користувачів встановлювати речі, коли вони bashграють роль оболонки (оболонка для входу, інтерактивна оболонка). Подумайте про середовище, яке у вас є xterm(інтерактивна оболонка) або в sshсеансах (оболонка входу) або в консолі (оболонка входу).
З іншого боку, bashтакож є потужною розмовною мовою - думкою про багато сценаріїв для управління сервісами, systemd- що вимагає іншого стилю роботи. Наприклад, коли розробник пише системний сценарій або bashпрограму, він / вона не любить автоматично створювати джерело користувача ~/.bash_profile. Це звичайна програма, а не оболонка. Звичайна програма (включаючи bashпрограми) природно успадковувала б налаштування від поточної робочої зони (оболонки), але не встановлювала їх.
Якщо ми пишемо програму для cronin bash- це просто трапляється записати в bash; насправді, ми можемо записати його в pythonабо perlбудь-якої іншої progamming Мова-тоді ми можемо мати опцію джерела bash«s ~/.bash_profile(читай: настройка оболонки користувача, який як раз трапляється бути та сама мова вашої мови програмування):
[ -f /home/user/.bash_profile ] && . /home/user/.bash_profile
Однак що робити, якщо конкретний користувач не використовує bashйого як свою оболонку? Він / вона може використовувати zsh, ksh, fishі т.д. Таким чином, ця практика буде на самому ділі не працювати при написанні програми для громадського користування.
Отже, ви можете джерело, ~/.bash_profileякщо ви думаєте, що це спрацює. Але тут справа не в тому, чи зможемо ми створити файл, а в тому, як слід працювати в системі: концепція дизайну . Коротше кажучи: ми повинні розглядати bashяк щось, що має 2 ролі: оболонку та мову, що розповсюджується . Тоді все буде набагато простіше зрозуміти.
.bashrcє лінія, яка не дозволяє їй працювати в неінтерактивних оболонках.