O Bash tem uma lógica bastante complicada em quais scripts ele é executado e quando.
Mas na maior parte se resume a:
- se você tiver configurações que são herdadas do processo pai para filho (variáveis de ambiente,
ulimit
s), geralmente é necessário defini-las apenas uma vez em cada login, para que seja mais eficiente para colocá-los em .profile
em vez de .bashrc
.
- se você tiver configurações que sejam herdadas e aditivas (por exemplo, adicionando algo ao valor existente de
PATH
com uma construção como PATH=$PATH:/some/directory
), essa configuração em .bashrc
faria com que essa adição acontecesse uma segunda vez sempre que você iniciasse outro processo de shell, o que seria tolo e um desperdício.
Por exemplo, se você definir PATH=$PATH:/some/directory
em .bashrc
, ele funcionará bem no seu shell principal. Mas quando você inicia um editor e, em seguida, usa sua funcionalidade de escape de shell, você pode descobrir que seu PATH agora tem um valor como ...:/some/directory:/some/directory
. Cada camada de shells filho adicionaria o diretório ao PATH outra vez. Configurações hereditárias e aditivas geralmente são melhor colocadas em .profile
.
- se você tiver configurações não herdadas entre processos regulares, como aliases ou funções de shell, você deverá defini-las em
.bashrc
. Se você os definisse em .profile
, você poderia encontrá-los não disponíveis em shells que começaram a usar a funcionalidade de escape de shell em vários aplicativos. (Isso também significa que você provavelmente desejará adicionar um comando para originar seu .bashrc
no final de seu .profile
, para que o shell de login principal da sessão também obtenha essas definições, a menos que o padrão% da distribuição seja/etc/profile
ou padrão .profile
já fornece essa funcionalidade.)
Com a interface gráfica do usuário, há mais uma complicação. A sessão da GUI normalmente fornecerá o conteúdo de .profile
ou equivalente no login (porque o respectivo script de inicialização da sessão é executado como um shell de login), portanto, quaisquer configurações herdáveis feitas geralmente serão herdadas pelo ambiente de desktop e Por sua vez, qualquer aplicativo que é iniciado usando ícones da área de trabalho ou menus.
Todas as janelas de terminal dentro de uma sessão X11 GUI podem ser configuradas de duas maneiras:
- sessões de terminal completamente independentes: cada janela de terminal é tratada como uma sessão de login independente e o ambiente é construído a partir de alguns padrões básicos do sistema para o shell dentro do processo do emulador de terminal. Nesse caso, cada nova janela de terminal será executada como um shell de login e, portanto, executará
.profile
ou equivalente quando aberta.
- cada janela de terminal é tratada como parte da sessão de login da GUI principal: nesse caso, as shells dentro das janelas de terminal são iniciadas como shells de não-login e só executam
.bashrc
ou equivalente. As configurações herdáveis são herdadas da sessão principal de login da GUI, por meio dos processos do gerenciador de ambiente / janela da área de trabalho.