Когда я 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) гласит:
Если указана команда, она выполняется на удаленном хосте вместо оболочки входа в систему.
а также
Когда идентификация пользователя была принята сервером, сервер либо выполняет данную команду, либо входит в систему на компьютере и предоставляет пользователю обычную оболочку на удаленной машине.
Они подсказывают мне, что оболочка, которую вы получаете, является оболочкой входа в систему.