A maneira mais simples é inventar uma máquina do tempo, visitar as várias pessoas que criaram os arquivos de inicialização do shell e dizer-lhes para distinguir claramente três coisas:
- configuração da sessão, por exemplo, variáveis de ambiente;
- início da 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, ligações de teclas.
Não é muito difícil obter a sessão versus o shell de maneira portátil: a inicialização no tempo de login entra .profile
(ou .zprofile
, ou .login
), a inicialização do shell entra .bashrc
ou .zshrc
. Eu escrevi anteriormente sobre .bash_profile
, zsh vs. outros shells , mais sobre portabilidade (principalmente sobre bash) , mais sobre quem lê.profile
.
Um problema restante é distinguir entre a configuração e o início da sessão. Na maioria dos casos, ~/.profile
é executado quando você efetua login e pode dobrar como ambos, mas há exceções:
- Se o seu shell de login for (t) csh ou zsh
~/.login
e ~/.zprofile
for originado em vez de ~/.profile
. Ditto para o bash e ~/.bash_profile
, mas isso é facilmente resolvido com a terceirização ~/.profile
de ~/.bash_profile
.
- Se você efetuar login em um gerenciador de exibição (xdm, gdm, kdm,…), se a sua
~/.profile
leitura será dependente da versão do programa, da sua distribuição (Linux ou não) e do tipo de sessão que você escolher.
- Se você conta com o gerenciador de exibição para iniciar uma sessão para você, é
.profile
necessário 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
fazer a configuração e o início da sessão. Portanto, o arquivo pode ser essencialmente . ~/.xsession; . ~/.xinitrc
. Algumas fontes de distribuição ~/.profile
antes ~/.xsession
. As distribuições modernas são ~/.xsession
originadas apenas quando você seleciona uma sessão "personalizada" no gerenciador de exibição, e essa sessão nem sempre está disponível.
- Seu gerenciador de sessões pode ter sua própria maneira de definir variáveis de ambiente. (Essa é uma parte opcional do seu ambiente de área de trabalho, escolhida por você por meio de um arquivo de configuração ou pela seleção de 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.)
Em resumo, ~/.profile
é o lugar certo para variáveis de ambiente. Se não for lido, tente fazer a busca ~/.xsession
(e inicie os programas X a partir daí) ou procure um método específico do sistema (que pode depender da sua distribuição, gerenciador de exibição, se houver, tipo de sessão, gerenciador de exibição e ambiente de área de trabalho ou gerenciador de sessões).
.profile
não está carregado ou algo substitui as variáveis de localidade? (Tente configurar alguma outra variável comoexport MACIEJ_PROFILE=yes
para certificar-se.set -x
No.profile
pode ser uma boa maneira de verificar o que está sendo executado em e depois.profile
, se ele é lido em tudo.) Não há nenhum ponto em terceirização.profile
de.zshrc
.