Por que .profile (e não .bashrc) acrescenta ~ / bin ao caminho?

9

Como .bashrc é mais "genérico" (no sentido de que .profile as origina), por que o procedimento "incluir ~/bin to path" não está dentro de .bashrc ? Por que o usuário não o desejaria em um shell de não-login? (Especialmente hoje em dia, onde os shells não-login são mais comuns *.)

Eu sei que posso fazer manualmente essa alteração, mas quero saber se existe um motivo.

* não pode provar, mas acho que é o caso.

    
por borges 08.04.2013 / 19:07

2 respostas

12

~/.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, como dash .
  • 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:

  1. 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.

  2. 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 seu PATH . Isso torna a variável de ambiente PATH 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).

    
por Eliah Kagan 09.04.2013 / 00:52
3

É porque tradicionalmente as variáveis de ambiente são apenas em /etc/profile ou .profile . O arquivo bashrc é para coisas como aliases, configurações de prompt, opções de shell e assim por diante (isto é, coisas relacionadas diretamente ao shell).

    
por teppic 08.04.2013 / 22:04