~/.bashrc
e /etc/bash.bashrc
são executados toda vez que um shell bash
interativo é iniciado.
Por outro lado, ~/.profile
e /etc/profile
são executados toda vez que qualquer shell login é iniciado. Portanto, ele não precisa ser um bash
shell, mas ele precisa ser um shell de login (e muitas bash
instâncias do shell não são shells de login ).
- Um
bash
shell é um shell onde o programa de shell que o fornece ébash
, em vez de algum outro programa, comodash
. - Um shell de login é um shell que é iniciado automaticamente como consequência do login, para fornecer a interface do usuário (gráfica ou de linha de comando) para o login. Quando um shell de login é encerrado, o login termina.
Portanto, colocar uma recomendação que acrescente entradas a PATH
em um arquivo bashrc
seria:
-
Não faça nada quando o shell não for
bash
, o que geralmente é o caso. Por exemplo,PATH
não seria modificado quando você estivesse em uma sessão de login gráfica. Lembre-se,PATH
não é usado apenas por programas de linha de comando. -
Anexe-o repetidamente na presença de shells
bash
aninhados. Então, se você iniciar um shell dentro de um shell - o que é muito comum, por uma variedade de razões - então você terá várias entradas~/bin
empilhadas no seuPATH
. Isso torna a variável de ambientePATH
difícil de ler e, às vezes, também diminui o desempenho.
Isso seria indesejável. Assim, seria errado colocar isso em um arquivo bashrc
; ele realmente pertence a ~/.profile
. ~/.profile
é o lugar certo para:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Os shells que não são de login têm shells de login (ou algo que se comporta como um shell de login) como seus pais e herdam a maioria de suas variáveis de ambiente, incluindo PATH
, desse shell de login. Portanto, colocar comandos de modificação de caminho em ~/.profile
exige que você efetue logout e login para que eles sejam efetivos, mas também afeta o ambiente de shells que não são de login (assim como o ambiente para programas que não são shells, já que o programa obtém seu próprio conjunto de variáveis de ambiente - chamado de "ambiente" - herdado de seu processo pai).