Respostas:
Se você é um usuário normal do Ubuntu Desktop, o único shell de login é ... sua área de trabalho (você digita uma senha para entrar, certo;)? Bem, tecnicamente, é um shell de login que inicia uma GUI, mas isso está chegando ao jargão. E sim, ele lerá as configurações em.profile
A única vez em que você (um usuário normal) provavelmente verá um shell de login que se parece com um shell de login é se você estiver tendo algum problema com a área de trabalho e mudar para um terminal virtual com o atalho Ctrl+ Alt+ F1.
ssh
(ou conectar-se localmente com ssh localhost
)bash -l
(ou sh -l
)root
shell de login inicial comsudo -i
sudo -u username -i
root
root
usuário com (e sua senha)su - username
sudo login
comando para alternar usuário~/.pam_environment
(apenas variáveis, sem comandos bash!), Faça logout, faça login e observe tudo aparecer magicamente na área de trabalho e também no terminal gnome!
/etc/profile
, /etc/profile.d
ou ~/.profile
.
Eu não acho que a resposta correta possa ser dada sem "jargão técnico". Como esta pergunta é a primeira a aparecer no Google para a consulta "o que é um shell de login", estou fornecendo uma resposta mais correta abaixo:
O shell de login é simplesmente um shell que foi dito para ser um shell de login. Isso não significa que o shell apareça após o login, embora normalmente o aplicativo que efetua o login esteja dizendo ao shell que ele é iniciado. Existem as seguintes maneiras de informar ao shell que ele deve ser de login:
-l
ou --login
argumento, assumindo que ele conhece (não conheço nenhum shells que não conheço -l
, mas --login
só é suportado por alguns shells).argv[0]
definido como -{some_string}
(ou seja, com HYPHEN-MINUS anexado ao habitual argv[0]
ou a alguma outra string). Isto é o que o ssh e o su fazem: su apenas executa o executável com -su
as argv[0]
(olá para todos que pensam argv[0]
ter algo a ver com o nome do executável atualmente em execução), o ssh executa o zsh -zsh
quando o usuário define /bin/zsh
como seu shell.A lógica do shell não tem absolutamente nada a ver com alguém pedindo uma senha ou executando outro procedimento de autenticação. Alguns programas como o ssh ou o login (ou alguns emuladores de terminal como o urxvt) executam shells como os de login argv[0]
que começam com um HYPHEN-MINUS. Alguns como su ou sudo (ou zsh: veja o -
modificador de pré-comando descrito na seção PRECOMMAND MODIFIERS in man zshmisc
) não fazem isso por padrão, mas podem ser informados. Alguns têm a única opção de dizer ao shell para o login usando seu argumento (ie bash -l
): ssh com um argumento de comando (que explicitamente diz ao ssh o que executar no terminal remoto).
Geralmente, é melhor consultar primeiro a documentação do programa usado para chamar o shell para determinar se o shell será o primeiro login e, em seguida, realizar alguns testes para determinar se o aplicativo iniciará um shell de login (por exemplo, adicionando echo
a .profile
).
argv[0]
a uma das exec*
funções, naturais e inevitáveis: você sempre fornece o argv[0]
caminho para o comando realmente executado ao usar as exec*
funções, mesmo que você nunca deseje argv[0]
ser diferente da execução do comando. Outros idiomas fornecem seus próprios caminhos. Especificamente o bash permite usar exec -a new_argv0 bash
, mas isso, é claro, vai substituir atualmente em execução shell com o que você exec
ED, assim você pode precisar de usar subshell ( (exec -a -zsh zsh)
)
$0
, e, talvez também algo mais (variável, configuração etc.) esteja definido para que a lógica do shell possa ser detectada no arquivo de configuração, mas quem se incomoda em detectá-lo para que isso faça alguma diferença? Isso é tudo que eu sei.