Ідея полягає в тому, що користувач повинен мати (максимум) одну оболонку входу на хост. (Можливо, я повинен сказати, одна оболонка входу на хост на термінал - якщо ви одночасно входите в хост через декілька терміналів, ви б розраховували мати кілька оболонок входу.) Це, як правило, (завжди?) - перша оболонка, яку ви отримаєте після входу (звідси назва). Отже, ця схема дозволяє вказати дії, які ви хочете зробити лише один раз за кожним входом у систему, і речі, які ви хочете робити щоразу, коли ви запускаєте нову (інтерактивну) оболонку.
Зазвичай, кожна інша оболонка, яку ви запускаєте після входу в систему, буде нащадком (дитиною дитини дитини ...) оболонки входу, і тому буде успадковувати багато параметрів (змінні середовища umask
тощо) від оболонки входу. І, відповідно, ідея полягає у тому, що у файлах ініціалізації входу ( .login
, .profile
тощо) слід встановити параметри, які є спадковими, і дозволити .bashrc
(або що б ви не використовували) обробляти ті, які не є ( set
, shopt
неекспортовані змінні оболонки тощо)
Інше поняття полягає в тому, що файли ініціалізації входу (і тільки вони) повинні робити "важкий підйом", тобто дії, що потребують ресурсів. Наприклад, ви можете хотіти, щоб у фоновому режимі певні процеси виконувались у фоновому режимі кожного разу (але лише одна копія (екземпляр) з них). Можливо, ви захочете, щоб під час входу в систему відображалася інформація про стан (наприклад, df
або who
), але не кожен раз, коли ви запускаєте нову інтерактивну оболонку. Особливо, якщо у вас є інтерактивпрограма / діалог (тобто той, який вимагає від вас введення), який ви хочете запускати щоразу, коли ви входите в систему, ви, ймовірно, не хочете, щоб він запускався кожного разу при запуску нової оболонки. Як крайній приклад, двадцять років тому Solaris зареєстрував вас в одній, не графічній оболонці без вікон. (Я вважаю, що це змінилося відтоді.) Завдання .login
або .profile
(або що завгодно) запустити систему вікон, з такою командою startx
. (Це частково було корисно, оскільки було доступно декілька систем вікон. У різних користувачів були різні переваги. Деякі користувачі використовували різні системи в різних ситуаціях, і в нас було діалогове вікно, .profile
яке запитувало "Яку систему вікон ви сьогодні бажаєте використовувати?") Очевидно, ви б не хотіли, щоб це запускалося кожного разу, коли ви відкривали нове вікно чи вводили текстsh
.
Минуло віки, з тих пір, як я використовував що-небудь, крім bash
хіба що крайових випадків. (Наприклад, я пишу сценарії за допомогою #!/bin/sh
, тому в деяких системах мої сценарії запускаються dash
, а для інших вони працюють bash
в режимі POSIX. Кілька разів на рік я бігаю csh
/ tcsh
кілька хвилин, щоб побачити, як воно щось обробляє, або відповідь на запитання.) Якщо ви використовуєте кілька оболонок (наприклад, bash
та zsh
) щодня, ваші шаблони можуть бути різними. Якщо ваша основна оболонка (як визначено в /etc/passwd
) bash
, ви, можливо, захочете викликати zsh
оболонку для входу, а потім, можливо, викликати деякі інтерактивні zsh
оболонки без входу, підпорядковані цьому. Ймовірно, ви повинні уникати наявності оболонки для входу, яка підпорядкована іншій оболонці входу того ж типу.
Як зазначено в Різниці між оболонкою для входу та оболонкою без входу? , програма OS X Terminal запускає оболонку для входу, тому типовий користувач, як правило, має кілька «оболонок входу», що працюють одночасно. Це дещо інша модель від тієї, яку я описав вище, і може вимагати від користувача переосмислити те, що він робить у своєму .login
або.profile
(або будь-який інший) файл. Я не знаю, чи розробники ОС X задокументували своє обґрунтування цього дизайнерського рішення. Але я можу уявити ситуацію, в якій це було б корисно. Був час, коли я звичайно відкривав декілька вікон оболонок, коли я входив у систему, і я встановлював їх для різних кольорів тексту та фону (записуючи послідовності втечі ANSI на екран), щоб допомогти мені відстежувати, що було. Кольорові термінали - це приклад того, що не успадковується дітьми, але зберігається у вікні. Отже, це те, що ви хотіли б робити щоразу, коли ви запускаєте нове вікно терміналу, але не кожен раз, коли ви запускаєте нову інтерактивну оболонку.