Где определяется оболочка входа?

Я читал разницу между sudo -i/-s здесь. После использования команды shopt отмечается, что все (sudo su/sudo -i/sudo -s) $SHELL предоставляют одинаковые результаты, но результаты команды shopt отличаются.

Итак, как определяется идентификатор входа и недействительности?

Откуда shopt получить результат?

Почему это не связано с $SHELL ?

sudo su

givinv@87-109:~$ sudo su
root@87-109:/home/givinv# 
root@87-109:/home/givinv# 
root@87-109:/home/givinv# shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
No login shell
root@87-109:/home/givinv# echo $SHELL
/bin/bash
root@87-109:/home/givinv# 
root@87-109:/home/givinv# exit
givinv@87-109:~$ 

sudo su

givinv@87-109:~$ sudo -i
root@87-109:~# 
root@87-109:~# shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
Login shell
root@87-109:~# echo $SHELL
/bin/bash
root@87-109:~# 

sudo -s

root@87-109:~# sudo -s
root@87-109:~# shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
No login shell
root@87-109:~# echo $SHELL
/bin/bash
root@87-109:~# 
1
задан 13 April 2017 в 15:23

2 ответа

Как объясняет @Serg в этом ответе о том, как определить, какую оболочку вы используете, переменная SHELL является только оболочкой текущего пользователя по умолчанию, прочитанной с /etc/passwd:

$ grep zanna /etc/passwd
zanna:x:1000:1000:Zanna,,,:/home/zanna:/bin/bash

, поэтому если I echo $SHELL всегда будет возвращать /bin/bash:

$ zsh
% echo $SHELL
/bin/bash

Независимо от того, является ли оболочка оболочкой входа, является ли опция оболочки определена во время запуска оболочки. Программа оболочки хранит эту информацию вместе со всеми ее другими настройками и переменными. Команда shopt предоставляет способ увидеть эту информацию и, если возможно, для данного параметра, установить или отключить ее (это не относится к login_shell, что, конечно, зависит от процесса, используемого для запуска оболочка)

Параметры программы sudo определяют, как будут запускаться эти разные типы корневой оболочки:

в этом ответе о том, как определить, в какой оболочке вы работаете

9
ответ дан 23 May 2018 в 03:54
  • 1
    Хорошее объяснение. Я думаю, вы объяснили, что shopt и login_shell должны представлять гораздо лучшее, что в моем ответе. – Sergiy Kolodyazhnyy 25 November 2016 в 13:25
  • 2
    @Serg спасибо :) Я думаю, что ваше объяснение более основательно :) – Zanna 25 November 2016 в 13:42

man bash:

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

man login:

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

Значение для $HOME, $SHELL [...] задано в соответствии с соответствующими полями в записи пароля.

Оболочка - это оболочка входа, если он был вызван как оболочка входа. Переменная среды $SHELL устанавливается login или вызывающей программой, например su. Сама оболочка не устанавливает его. shopt показывает текущие варианты оболочки.
3
ответ дан 23 May 2018 в 03:54

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

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