O Que É um Login Shell? Arquivos de Inicialização e Sessões
Um login shell é o shell iniciado quando você faz login em um sistema, que lê arquivos de inicialização de profile para configurar seu ambiente para a sessão.
Quando você faz login em uma máquina, o primeiro shell que roda é um login shell. Ele lê arquivos como /etc/profile e ~/.bash_profile para configurar variáveis de ambiente, PATH e aliases para toda a sessão. Etapas de CI geralmente rodam shells não-login, que é por que suas configurações de profile cuidadosamente ajustadas frequentemente não se aplicam em uma pipeline.
O que é um login shell
Um login shell é invocado como parte do login. Ele fonte os arquivos de inicialização de login que inicializam a sessão: definindo PATH, definindo variáveis e rodando lógica de setup que deve acontecer uma vez por login.
Arquivos de inicialização que ele lê
- /etc/profile para configurações de login de todo o sistema.
- ~/.bash_profile ou ~/.profile para o usuário.
- Estes tipicamente definem PATH e variáveis exportadas.
Login versus não-login
Um shell não-login, como uma nova aba de terminal ou a invocação de um script, pula os arquivos de profile de login e lê arquivos de inicialização diferentes (como ~/.bashrc) ou nenhum. Os dois leem configurações diferentes.
Por que a distinção importa
Configurações colocadas em um profile exclusivo de login não se aplicam a um shell não-login. É por isso que uma entrada de PATH que funciona no seu terminal pode estar ausente em um script que roda como um shell não-login.
Login shells em CI
Etapas de CI tipicamente rodam shells não-login e não-interativos, então seu setup em ~/.bash_profile não é fonteado. Qualquer coisa que um build precise, como adições ao PATH, deve ser definida explicitamente no workflow em vez de depender de profiles de login.
Setup explícito em runners gerenciados
Nos runners da Latchkey, as etapas não rodam como login shells, então defina o ambiente e o PATH necessários diretamente no workflow. Isso mantém os builds reproduzíveis em vez de depender de arquivos de profile que podem não ser fonteados.
Principais conclusões
- Um login shell roda no início da sessão e lê arquivos de inicialização de profile.
- Shells não-login pulam esses arquivos, então configurações exclusivas de login não se aplicam.
- Etapas de CI geralmente rodam não-login, então defina PATH e variáveis explicitamente.