~/.bashrc
e /etc/bash.bashrc
são executados toda vez que um bash
shell interativo é iniciado.
Por outro lado, ~/.profile
e /etc/profile
são executados toda vez que qualquer shell de login é iniciado. Portanto, ele não precisa ser um bash
shell, mas 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 em que o programa que o fornece bash
, em vez de algum outro programa, como o dash
.
- Um shell de logon é um shell que é iniciado automaticamente como conseqüência do logon, para fornecer a interface do usuário (gráfica ou de linha de comando) para o logon. Quando um shell de login é encerrado, o login termina.
Portanto, colocar um elogio que acrescenta entradas PATH
em um bashrc
arquivo:
Não faça nada quando o shell não estiver bash
, o que geralmente acontece. Por exemplo, PATH
não seria modificado quando você estiver em uma sessão gráfica de login. Lembre-se, PATH
não é usado apenas por programas de linha de comando.
Acrescente-o repetidamente na presença de bash
conchas aninhadas . Portanto, se você iniciar um shell dentro de um shell - o que é muito comum, por várias razões -, você terá várias ~/bin
entradas empilhadas no seu PATH
. Isso PATH
dificulta a leitura da variável de ambiente e, às vezes, também diminui o desempenho.
Isso seria indesejável. Portanto, seria errado colocar isso em um bashrc
arquivo; realmente pertence ~/.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 fazem login têm shells de login (ou algo que se comporta como um shell de login) como pai e herdam a maioria de suas variáveis de ambiente, inclusive PATH
, desse shell de login. Portanto, a inserção de comandos de modificação de caminho ~/.profile
exige que você efetue logout e logon novamente para que eles sejam efetivos, mas isso também afeta o ambiente de shells que não são de login (assim como o ambiente de programas que não são shells, pois cada programa obtém seu próprio conjunto de variáveis de ambiente - chamado de "ambiente" - herdado de seu processo pai).