Um shell de login é o primeiro processo que é executado sob sua ID de usuário quando você efetua login em uma sessão interativa. O processo de login diz ao shell para se comportar como um shell de login com uma convenção: passar o argumento 0, que normalmente é o nome do executável do shell, com um caractere -
preended (por exemplo, -bash
enquanto normalmente seria bash
As camadas de login geralmente lêem um arquivo que faz coisas como configurar variáveis de ambiente: /etc/profile
e ~/.profile
para o shell Bourne tradicional, ~/.bash_profile
adicionalmente para bash † , /etc/zprofile
e ~/.zprofile
para zsh † , /etc/csh.login
e ~/.login
para csh, etc.
Ao efetuar login em um console de texto, ou por meio de SSH, ou com su -
, você obtém um shell de login interativo . Quando você faz login no modo gráfico (em um X gerenciador de exibição ), você não recebe um login shell, em vez disso, você obtém um gerenciador de sessão ou um gerenciador de janelas.
É raro executar um shell de login não interativo , mas algumas configurações do X fazem isso quando você efetua login com um gerenciador de exibição, para organizar a leitura dos arquivos de perfil. Outras configurações (isso depende da distribuição e do gerenciador de exibição) leia /etc/profile
e ~/.profile
explicitamente ou não as leia. Outra maneira de obter um shell de login não interativo é efetuar login remotamente com um comando passado pela entrada padrão que não é um terminal, por exemplo, ssh example.com <my-script-which-is-stored-locally
(em oposição a ssh example.com my-script-which-is-on-the-remote-machine
, que executa um shell não interativo e não-login).
Quando você inicia um shell em um terminal em uma sessão existente (tela, terminal X, buffer de terminal do Emacs, um shell dentro de outro, etc.), você obtém um shell interativo, sem login . Esse shell pode ler um arquivo de configuração de shell ( ~/.bashrc
para bash chamado como bash
, /etc/zshrc
e ~/.zshrc
para zsh, /etc/csh.cshrc
e ~/.cshrc
para csh, o arquivo indicado pela variável ENV
para Shells compatíveis com POSIX / XSI, como dash, ksh e bash quando invocados como sh
, $ENV
se configurados e ~/.mkshrc
para mksh, etc.).
Quando um shell executa um script ou um comando passado em sua linha de comando, ele é um shell não interativo, sem login . Esses shells são executados o tempo todo: é muito comum que quando um programa chama outro programa, ele realmente executa um pequeno script em um shell para invocar esse outro programa. Algumas shells lêem um arquivo de inicialização nesse caso (bash executa o arquivo indicado pela variável BASH_ENV
, zsh executa /etc/zshenv
e ~/.zshenv
), mas isso é arriscado: o shell pode ser chamado em todos os tipos de contexto e quase não há nada que você possa fazer que não quebre algo.
† Estou simplificando um pouco, veja o manual para os detalhes.