A maneira mais simples é inventar uma máquina do tempo, visitar as várias pessoas que criaram arquivos de inicialização do shell e dizer-lhes para distinguir claramente entre três coisas:
- configuração da sessão, por exemplo variáveis de ambiente;
- inicialização de sessão, por exemplo, iniciando um shell de linha de comando ou um gerenciador de janelas ou executando
startx
; - inicialização do shell, por exemplo aliases, prompt, atalhos de teclado.
Não é muito difícil acessar a sessão vs. shell de maneira portátil: a inicialização do tempo de login entra em .profile
(ou .zprofile
ou .login
), a inicialização do shell entra em .bashrc
ou .zshrc
. Eu escrevi anteriormente sobre .bash_profile
, zsh vs. outros shells , mais sobre portabilidade (principalmente sobre o bash) , mais sobre quem lê .profile
.
Um problema remanescente é distinguir entre a configuração da sessão e o lançamento da sessão. Na maioria dos casos, ~/.profile
é executado quando você efetua login e pode ser usado como ambos, mas há exceções:
- Se o seu shell de login for (t) csh ou zsh,
~/.login
e~/.zprofile
serão originados em vez de~/.profile
. Ditto for bash e~/.bash_profile
, mas isso é facilmente resolvido pelo fornecimento de~/.profile
de~/.bash_profile
. - Se você fizer login em um gerenciador de exibição (xdm, gdm, kdm,…), seja seu
~/.profile
é lido depende da versão do programa, de sua distribuição (Linux ou não) e de qual tipo de sessão você escolhe.- Se você contar com o gerenciador de exibição para iniciar uma sessão para você, seu
.profile
deve definir variáveis de ambiente, mas não iniciar uma sessão (por exemplo, um gerenciador de janelas). - O arquivo de configuração tradicional para as sessões X é
~/.xsession
, executando a configuração da sessão e o lançamento da sessão. Portanto, o arquivo pode ser essencialmente. ~/.xsession; . ~/.xinitrc
. Algumas distribuições obtêm~/.profile
antes de~/.xsession
. As distribuições modernas só escolhem~/.xsession
quando você seleciona uma sessão “personalizada” do gerenciador de exibição, e essa sessão nem sempre está disponível. - Seu gerenciador de sessão pode ter sua própria maneira de configurar variáveis de ambiente. (Essa é uma parte opcional do seu ambiente de área de trabalho, escolhida por você através de um arquivo de configuração ou selecionando um tipo de sessão ao efetuar login; não confunda com os scripts de inicialização de sessão fornecidos pelo gerenciador de exibição, que são executados sob seu usuário, mas escolhido em todo o sistema Sim, é uma bagunça.)
- Se você contar com o gerenciador de exibição para iniciar uma sessão para você, seu
Em resumo, ~/.profile
é o local certo para variáveis de ambiente. Se não for lido, tente obtê-lo em ~/.xsession
(e inicie seus programas X a partir dele) ou procure por um método específico do sistema (que pode depender da sua distribuição, gerenciador de exibição, se houver, tipo de sessão se gerenciador de exibição e ambiente de desktop ou gerenciador de sessão).