Разница между оболочкой входа и оболочкой без входа?

Я понимаю основное различие между интерактивной оболочкой и неинтерактивной оболочкой. Но что именно отличает оболочку входа от оболочки без входа?

Можете ли вы привести примеры использования недействительной интерактивной оболочки?

234 голоса | спросил Igorio 9 Mayam12 2012, 00:57:43

4 ответа


246

Оболочка входа - это первый процесс, который выполняется под вашим идентификатором пользователя при входе в интерактивный сеанс. Процесс входа в систему указывает, что оболочка будет вести себя как оболочка входа с условным обозначением: передать аргумент 0, который обычно является именем исполняемого файла оболочки, с добавленным символом - (например, -bash, тогда как обычно это bash. В командах входа обычно читается файл, который выполняет такие действия, как установка переменных среды: /etc /profile и ~ /.profile для традиционной оболочки Bourne, ~ /.bash_profile дополнительно для bash â € , /etc /zprofile и ~ /.zprofile для zsh â € , /etc/csh.login и ~ /.login для csh и т. д.

Когда вы входите в текстовую консоль или через SSH или с помощью su -, вы получаете оболочку интерактивного входа . Когда вы входите в графический режим (в диспетчере отображения X ), вы не 't получить оболочку для входа, вместо этого вы получаете диспетчер сеанса или диспетчер окон.

Редко запускается оболочка не интерактивного входа , но некоторые настройки X делают это при входе в диспетчер дисплея, чтобы организовать чтение файлов профиля. Другие настройки (это зависит от дистрибутива и диспетчера дисплея) явно читайте /etc /profile и ~ /.profile или не читайте их. Другой способ получить неинтерактивную оболочку для входа - это дистанционно войти в систему с помощью команды, переданной через стандартный ввод, которая не является терминалом, например. ssh example.com <my-script-which-is-stored-local (в отличие от ssh example.com my-script-which-on-the-remote-machine, который запускает неинтерактивную оболочку без входа).

Когда вы запускаете оболочку в терминале в существующем сеансе (экран, X-терминал, буфер терминала Emacs, оболочка внутри другого и т. д.), вы получаете интерактивную, не зависающую оболочку , Эта оболочка может читать файл конфигурации оболочки (~ /.bashrc) для bash, вызываемого как bash, /etc /zshrc и ~ /.zshrc для zsh, /etc/csh.cshrc и ~ /.cshrc для csh, файл, обозначенный ENV переменная для POSIX /XSI-совместимых оболочек, таких как dash, ksh и bash при вызове sh, $ ENV, если установлено, и ~ /.mkshrc для mksh и т. д.).

Когда оболочка запускает скрипт или команду, переданную в командной строке, это неинтерактивная, не зависающая оболочка. Такие оболочки все время работают: очень часто, когда программа вызывает другую программу, на самом деле она запускает крошечный скрипт в оболочке для вызова этой другой программы. Некоторые оболочки читают загрузочный файл в этом случае (bash запускает файл, указанный переменной BASH_ENV, zsh запускает /etc /zshenv и ~ /.zshenv), но это рискованно: оболочку можно вызвать во всех контекстах, и вы вряд ли сможете что-то сделать, что может не сломать что-то.

â € Я немного упрощаю, см. руководство для подробностей.

ответил Gilles 1 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 01 Sep 2012 06:07:10 +0400 2012, 06:07:10
31

Чтобы узнать, находитесь ли вы в оболочке входа:

подсказки > эхо $ 0
-bash # "-" - первый символ. Следовательно, это оболочка входа.

подсказка > эхо $ 0
bash # "-" НЕ является первым символом. Это НЕ входная оболочка.

Информацию можно найти в man bash (поиск Invocation). Вот выдержка:

  

Оболочка для входа - это тот, чей первый символ аргумента нуль равен -, или   один начался с опции --login.

Вы можете проверить это самостоятельно. Каждый раз, когда вы используете SSH, вы используете оболочку входа. Например:

подсказки > ssh user @ localhost
fervor @ localhost's password:
подсказка > эхо $ 0
-bash

Важность использования оболочки для входа в систему - любые настройки в /home/user/.bash_profile будут выполнены. Вот вам немного больше информации, если вам интересно (из man bash)

"Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с опцией -login, она сначала считывает и выполняет команды из файла /etc /profile, если этот файл существует. После прочтения этого файла он ищет ~ /.bash_profile, ~ /.bash_login и ~ /.profile, в этом порядке, и читает и выполняет команды из первого, который существует и доступен для чтения. Опция -noprofile может использоваться, когда оболочка начинает блокировать это поведение.

ответил Timothy Pulliam 21 +03002015-10-21T17:46:17+03:00312015bEurope/MoscowWed, 21 Oct 2015 17:46:17 +0300 2015, 17:46:17
22

В оболочке входа argv [0] [0] == '-'. Вот как он знает, что это оболочка для входа.

И в некоторых ситуациях он ведет себя по-разному в зависимости от статуса «login shell». Например. оболочка, которая не является оболочкой входа, не будет выполнять команду «выход из системы».

ответил BOPOHOK 9 Mayam12 2012, 02:57:17
17

Оболочка, запущенная в новом терминале в графическом интерфейсе, будет интерактивной оболочкой без входа. Он будет источником вашего .bashrc, но не вашего .profile, например.

ответил Julian 9 Mayam12 2012, 02:20:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132