5

Я постоянно читаю об интерактивных, неинтерактивных оболочках для входа в систему и без входа в систему.

(Это в контексте того, какой из файлов .bash * читается).

Я не понимаю, что такое каждый тип оболочки, поэтому давайте начнем с основ.

Если я перейду с моего компьютера на компьютер с Ubuntu по ssh, какой тип оболочки будет запущен?

4 ответа4

3

Если вы используете SSH в своем Ubuntu, вы получаете интерактивную оболочку для входа. Вот разница:

  • Интерактивный или неинтерактивный. Любая оболочка, в которой вы можете набирать текст, является интерактивной. Фактически, многие сценарии проверяют переменную $PS1 которая содержит строку приглашения, чтобы выяснить, являются ли они интерактивными. Если оболочка выполняет сценарий оболочки, она не является интерактивной.

    Итак, если вы выполните ssh yourbox.example.com , вы получите интерактивную оболочку с настройками по умолчанию, а если вы выполните ssh yourbox.example.com mighty_shellscript.sh , вы получите неинтерактивную оболочку и ваш сеанс SSH завершится, когда скрипт завершится.

  • Вход в систему и не вход в систему: Когда вы входите в систему с консоли или дистанционно (например, через SSH), или когда вы передаете опцию -l bash , вы получаете оболочку входа. В противном случае - например, когда вы открываете окно терминала - вы получаете оболочку, не входящую в систему.

    Чтобы проверить, является ли оболочка оболочкой входа в систему, проверьте, является ли ее имя команды -bash вместо bash:

    ps -ef | grep [b]ash
    
2

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

Это говорит о том, что у вас есть оболочка для входа (от man bash):

# shopt | grep login
login_shell     on

Это говорит о том, что у вас есть интерактивная оболочка, ищите i (от man bash):

# echo $-
himBH

Интерактивная оболочка входа в систему, которую вы получаете, имеет чтение /etc/profile и одну из ~/.bash_profile , ~/.bash_login и ~/.profile , как объяснено в man bash:

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

0

Попробуйте эту команду.

[max@localhost ~]$ echo $SHELL
/bin/bash

вы получаете этот вывод, потому что ваш тип оболочки хранится в этой переменной SHELL .

Чтобы узнать переменную среды, введите эту команду

[max@localhost ~]$ env
.
.
.
HOSTNAME=localhost.localdomain
SHELL=/bin/bash
HISTSIZE=1000
USER=max
.
.
.

при вводе echo $SHELL он напечатает значение, хранящееся здесь

Это значение обновляется при каждой загрузке

0

Справочная страница ssh(1) гласит:

Если указана команда , она выполняется на удаленном хосте вместо оболочки входа в систему.

а также

Когда идентификация пользователя была принята сервером, сервер либо выполняет данную команду, либо входит в систему на компьютере и предоставляет пользователю обычную оболочку на удаленной машине.

Они подсказывают мне, что оболочка, которую вы получаете, является оболочкой входа.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .