ЧОМУ ** оболонка ** входу ** над оболонкою **, яка не входить у систему?


21

У мене є основне розуміння точкових файлів у системі * nix. Але я все ще досить розгублений щодо цієї різниці між оболонкою для входу і оболонкою без входу?

Купа різних відповідей (включаючи декілька дублікатів) вже вирішила наступні повідомлення:

  • Як викликати оболонку для входу або не вхід у систему
  • Як виявити оболонку для входу або не вхід у систему
  • Які файли запуску використовуються для оболонки для входу або не входу в систему
  • man bashДля додаткової інформації зверніться до документації (наприклад, )

Що відповіді не сказали (а також те, що я все ще плутаю):

  • Який випадок використання оболонки для входу або не входу в систему ? (наприклад, я налаштований лише zshrcдля цього, zshі цього достатньо для більшості особистих потреб у розробці, я знаю, що це не так просто, як vimrcробити vim)

  • Яка причина використовувати логін через оболонку, яка не входить у систему (крім використання різних файлів запуску та життєвих циклів)?

Відповіді:


14

Ідея полягає в тому, що користувач повинен мати (максимум) одну оболонку входу на хост. (Можливо, я повинен сказати, одна оболонка входу на хост на термінал - якщо ви одночасно входите в хост через декілька терміналів, ви б розраховували мати кілька оболонок входу.) Це, як правило, (завжди?) - перша оболонка, яку ви отримаєте після входу (звідси назва). Отже, ця схема дозволяє вказати дії, які ви хочете зробити лише один раз за кожним входом у систему, і речі, які ви хочете робити щоразу, коли ви запускаєте нову (інтерактивну) оболонку.

Зазвичай, кожна інша оболонка, яку ви запускаєте після входу в систему, буде нащадком (дитиною дитини дитини ...) оболонки входу, і тому буде успадковувати багато параметрів (змінні середовища 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 на екран), щоб допомогти мені відстежувати, що було. Кольорові термінали - це приклад того, що не успадковується дітьми, але зберігається у вікні. Отже, це те, що ви хотіли б робити щоразу, коли ви запускаєте нове вікно терміналу, але не кожен раз, коли ви запускаєте нову інтерактивну оболонку.

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