Когда я ssh на машине с Ubuntu, какую оболочку я использую

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

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

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

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

4 ответа

Решение

Если вы используете 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
    

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

Это говорит о том, что у вас есть оболочка входа (из 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 может использоваться, когда оболочка запущена, чтобы запретить это поведение.

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

[max @ localhost ~] $ echo $ SHELL
/ Бен / Баш

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

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

[max@localhost ~]$ env,,,
HOSTNAME=localhost.localdomain
SHELL=/bin/ Баш
HISTSIZE=1000
USER= макс,,,

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

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

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

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

а также

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

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

Другие вопросы по тегам