Quais arquivos de instalação devem ser usados ​​para configurar variáveis ​​de ambiente com o bash?

9

Como pedi e obtive respostas aqui e aqui , a variável PATH tem nomes de caminho diferentes, dependendo de como o aplicativo é ativado.

  • Quais arquivos de instalação (.bashrc, .profile, ...) devem ser usados ​​para ter a mesma variável PATH, não importa como inicio o software com o bash?
prosseek
fonte

Respostas:

15

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.

Gilles 'SO- parar de ser mau'
fonte
Alguns aplicativos chamam shells interativos sem logon, o que significa que .profile e .bash_profile não são lidos. Se você deseja definir envs para esses aplicativos, uma maneira de fazer isso é configurá-los em .bashrc, mesmo que esse não seja o lugar para ele; veja github.com/mobile-shell/mosh/issues/102#issuecomment-12503646
William
@William .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.
Gilles 'SO- stop be evil'
mosh não é uma GUI, é uma alternativa ao ssh. Não estou defendendo seu comportamento, apenas tentando ajudar outras pessoas que enfrentam o mesmo problema que eu e outras pessoas tivemos, conforme descrito na edição do Github que eu vinculei.
William
2

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:

  1. Crie seu próprio script, que obtém uma lista de diretórios e gera o código bash apropriado para bashe o código elisp eshell.
  2. Defina sua variável de ambiente ESHELL ou SHELL para que você execute o bash no emacs. Isto é o que eu faço. O Bash funciona bem no emacs.

Você também pode estar interessado na discussão sobre como adicionar um diretório a um caminho sem duplicatas .

Doug Harris
fonte
1

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.

garyjohn
fonte