Respostas:
Tradicionalmente, é o local para definir variáveis de ambiente por usuário em sistemas unix ~/.profile. Este arquivo é lido pelo shell de login (ou seja, o programa iniciado quando você faz login e no qual você pode digitar comandos), desde que o shell de login seja um shell compatível com Bourne.
Bash é um shell compatível com Bourne. Quando é chamado como um shell de login, lê ~/.bash_profilese esse arquivo existe e ~/.profilese ~/.bash_profilenão existe.
Como regra geral, se você digitar sua senha no modo de texto (por exemplo, em um console de texto ou remotamente com ssh), o shell obtido é um shell de login.
No entanto, se você digitar sua senha em um programa gráfico e se conectar a um ambiente gráfico, isso ignora o shell de login normal. A .profileleitura deste caso depende de como a sessão gráfica é configurada; por exemplo, varia entre distribuições Linux, gerenciadores de exibição e ambientes de desktop. Às vezes, um dos programas da cadeia chama explicitamente um shell de login; às vezes um dos programas lê explicitamente ~/.profile; e às vezes nada disso acontece e ~/.profilenão é lido.
Para dar um exemplo da variabilidade, tanto quanto posso ver de uma rápida olhada nos scripts envolvidos, no Ubuntu 10.04: se você efetuar login com o kdm ou o lxdm, ~/.bash_profileserá lido se existir ~/.profile; se você efetuar login com o gdm, somente ~/.profileserá lido; se você efetuar login com o xdm, ~/.profilenão será lido.
Todos os sistemas que conheço oferecem uma maneira de definir variáveis de ambiente por usuário. Infelizmente não há resposta geral.
Observe que algumas vezes você verá recomendações para definir variáveis de ambiente ~/.bashrcou iniciar um shell de login em cada terminal em um ambiente da GUI. Ambos são más idéias; uma das razões é o problema que você teve, a saber, que suas variáveis de ambiente estavam disponíveis apenas em programas iniciados por meio de um terminal, e não em programas iniciados diretamente com um ícone ou menu ou atalho de teclado.
.profileé lido quando você faz login. A inserção de variáveis de ambiente .bashrcnão funciona, e seu cenário ilustra que: o aplicativo (presumivelmente GUI) que executa esse shell deve ter suas variáveis de ambiente, mas se você as definir .bashrc, ele não funcionará. t.
A resposta definitiva está na seção da página de manual do bash em Arquivos de inicialização do Bash . "Quando um shell interativo que não é um shell de login é iniciado, o Bash lê e executa comandos de ~ / .bashrc, se esse arquivo existir."
As respostas às suas outras perguntas apontam que o eshell não é realmente executado bash. Emacs eshellnão é bash. Assumir que eshellisso carregaria .bashrcé tão defeituoso quanto assumir zshou cshcarregaria .bashrc. É uma concha diferente.
Eu vejo duas opções:
bashe o código elisp eshell.Você também pode estar interessado na discussão sobre como adicionar um diretório a um caminho sem duplicatas .
Definir seu PATH em seu perfil ~ /. Deve funcionar. Esse arquivo é lido no login por todos os shell compatíveis com POSIX ou Bourne que eu conheço, incluindo o bash. Se você fizer alterações nesse arquivo, precisará sair e fazer login novamente para que as alterações tenham efeito. Como PATH faz parte do ambiente do seu processo de login, ele deve ser exportado para todos os shell iniciados posteriormente.