Essencialmente, se um shell é logon ou não, interativo ou não importa por exatamente um motivo:
Os arquivos de inicialização e as opções padrão definidas dependem se um shell é logon ou não e interativo ou não.
Do mesmo modo, se um shell faz login ou não, ou é interativo ou não, depende apenas da chamada usada - o nome exato do comando e as opções.
As duas propriedades são ortogonais - se um shell é logon ou não, não tem influência em determinar se é interativo ou não.
O Bash inicia um shell de logon se algum deles for verdadeiro:
argv[0]
, o nome do comando no qual foi chamado, começa com um -
- a
-l
opção está especificada
Da mesma forma, o bash inicia um shell interativo se algum deles for verdadeiro:
- não foi especificado um arquivo para executar (ou seja, o comando não era
bash some/file
) ou uma sequência de comandos para executar ( bash -c 'foo'
) (a condição real é um pouco mais complexa, consulte o manual)
- a
-i
opção foi especificada
Notavelmente (e paradoxalmente), o último implica que bash -ic 'foo'
inicia um shell interativo.
Portanto, o seguinte inicia um shell interativo de login, mesmo que não tenha nada interativo e a invocação não tenha nada a ver com o login:
bash -lic true
O fato de que o login via console ou GUI inicia um shell de login (ou talvez não) é inteiramente um efeito do processo de login usando a chamada apropriada.
As condições e efeitos são descritos em detalhes no manual do bash, seção Arquivos de inicialização .
Uma fonte importante de confusão é que existe outro significado comum para o shell "login":
O shell de login de um usuário é o shell definido na passwd
entrada do usuário (que pode vir de /etc/passwd
, LDAP ou outra fonte).
O login
programa, SSH, etc. inicia esse shell como um shell de login , no sentido indicado no restante da resposta - -
geralmente com um líder no nome do comando. Se você quer ser particularmente confuso, pode dizer:
Alguns processos de login iniciam o shell de login do usuário como um shell de login.
Observe que o login da GUI inicia um shell de login apenas porque os desenvolvedores acharam conveniente - o LightDM executa um script no login que obviamente não é interativo e certamente não depende do shell de login do usuário (no segundo sentido). Porém, não dependa do gerenciador de exibição iniciar um shell de login - nem todos eles o fazem, e no Wayland e no GNOME, o processo de login não usa scripts de shell.
non-interactive login shell
está errado.