Відповіді:
Якщо ви звичайний користувач Ubuntu Desktop, єдиною оболонкою для входу є ... ваш робочий стіл (ви вводите пароль, щоб увійти, правда;)? Ну, технічно це оболонка для входу, яка запускає графічний інтерфейс, але це входить в жаргон. І так, він прочитає налаштування в.profile
Єдиний раз , коли ви (звичайний користувач), ймовірно , побачить оболонку входу в системі, яка виглядає як шелл, якщо у вас виникли якісь - то проблеми з робочим столом , і ви перейдіть на віртуальний термінал з Ctrl+ Alt+ F1ярликом.
ssh
(або локально підключившись ssh localhost
)bash -l
(або sh -l
)root
оболонку входу за допомогоюsudo -i
sudo -u username -i
root
root
з (та їх паролем)su - username
sudo login
команди для переключення користувача~/.pam_environment
(лише змінні, жодних команд bash!), Вийдіть із системи, увійдіть у систему та спостерігайте за тим, як усе магічно відображається на робочому столі, а також у gnome-терміналі!
/etc/profile
, /etc/profile.d
або ~/.profile
.
Я не думаю, що правильну відповідь можна дати без "технічного жаргону". Оскільки це питання є першим, що з'являється в Google для запиту "що таке оболонка для входу", я надаю більш правильну відповідь нижче:
Оболонка для входу - це просто оболонка, про яку було сказано, що оболонка для входу. Це не означає оболонку, яка з’являється після входу в систему, хоча зазвичай програма, яка входить до вас, повідомляє оболонку, що вона запускається як оболонка для входу. Існують такі способи сказати оболонці, що вона повинна бути вхідною:
-l
або --login
аргументом припускаючи , що він знає про це (я не знаю ні снарядів , які не знають -l
, але --login
підтримується тільки кілька оболонок).argv[0]
встановленим -{some_string}
рівнем (тобто з HYPHEN-MINUS, який передбачив звичайну argv[0]
або якусь іншу рядок). Це те, що роблять ssh і su: su просто працює з виконуваним файлом -su
as argv[0]
(привіт всім, хто думає, argv[0]
має щось спільне з поточним запущеним ім'ям виконавця), ssh запускає zsh, -zsh
коли користувач встановив /bin/zsh
свою оболонку.Логічність оболонки абсолютно не має нічого спільного з тим, щоб хто-небудь запитав вас про пароль або виконував якусь іншу процедуру аутентифікації. Деякі програми, такі як ssh або login (або деякі емулятори терміналів, такі як urxvt), запускають оболонки як вхідні дані, використовуючи, argv[0]
що починається з HYPHEN-MINUS. Деякі з них, такі як su або sudo (або zsh: див. -
Модифікатор попередньої команди, описаний у розділі PRECOMMAND MODIFIERS in man zshmisc
), не роблять цього за замовчуванням, але можуть так сказати. У деяких є єдиний варіант сказати оболонці, щоб бути вхідним, використовуючи свій аргумент (тобто bash -l
): ssh з аргументом команди (який явно повідомляє ssh, що потрібно запускати на віддаленому кінці).
Як правило, краще спочатку ознайомитися з документацією програми, що використовується для виклику оболонки, щоб визначити, чи буде оболонка вхідною, а вдруге виконати деякі тести, щоб визначити, чи додаток запустить оболонку входу (наприклад, додавши echo
в .profile
).
argv[0]
однієї з exec*
функцій, природної та неминучої: ви завжди постачаєте обидві argv[0]
і шлях до команди фактично виконується при використанні exec*
функцій, навіть якщо ви ніколи не хочете argv[0]
відрізнятися від запуску команд. Інші мови надають свої способи. Конкретно bash дозволяє використовувати exec -a new_argv0 bash
, але це, звичайно, замінить поточну працюючу оболонку тим, що ви exec
редагували, тому вам може знадобитися використовувати (exec -a -zsh zsh)
$0
, і, можливо, також встановлено щось інше (змінна, налаштування тощо), щоб в файлі конфігурації була виявлена логічність оболонки, але хто турбує насправді це виявити, щоб це не змінило? Це все, що я знаю.