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

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

Я продолжаю читать об интерактивных, неинтерактивных, авторизационных и неавторизованных оболочках.

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

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

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

решение1

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

  • Интерактивный и неинтерактивный:Любая оболочка, в которой можно печатать в приглашении, является интерактивной. Фактически, многие скрипты проверяют переменную $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(from man bash):

# echo $-
himBH

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

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

решение3

Theсш(1)на странице руководства написано:

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

и

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

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

решение4

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

[макс@localhost ~]$ echo $SHELL
/bin/баш

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

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

[макс@localhost ~]$ env
.
.
.
HOSTNAME=localhost.localdomain
ОБОЛОЧКА=/bin/bash
РАЗМЕР ИСТОРИИ=1000
ПОЛЬЗОВАТЕЛЬ=макс
.
.
.

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

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

Связанный контент