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

9

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

  • Quais arquivos de configuração (.bashrc, .profile, ...) devem ser usados para ter a mesma variável PATH, não importa como eu inicie o software com o bash?
por prosseek 02.09.2010 / 15:24

3 respostas

14

Tradicionalmente, o local para definir variáveis de ambiente por usuário em sistemas unix é ~/.profile . Esse arquivo é lido pelo shell de login (ou seja, o programa que é iniciado quando você efetua login e pode digitar comandos nele), desde que o shell de login seja um shell compatível com o Bourne.

O Bash é um shell compatível com o Bourne. Quando ele é chamado como um shell de login, lê ~/.bash_profile se esse arquivo existir e ~/.profile if ~/.bash_profile nã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 que você recebe é um shell de login.

No entanto, se você digitar sua senha em um programa gráfico e efetuar login em um ambiente gráfico, isso ignorará o shell de login normal. Se .profile é lido nesse caso depende de como a sessão gráfica é configurada; por exemplo, varia entre as distribuições do Linux, entre os gerenciadores de exibição e entre os ambientes de desktop. Às vezes, um dos programas na cadeia chama explicitamente um shell de login; às vezes, um dos programas lê explicitamente ~/.profile ; e às vezes nada disso acontece e ~/.profile não é lido.

Para dar um exemplo da variabilidade, tanto quanto eu posso ver de uma rápida olhada nos scripts envolvidos, no Ubuntu 10.04: se você logar com o kdm ou lxdm, ~/.bash_profile é lido se existir, e ~/.profile caso contrário; se você efetuar login com o gdm, somente ~/.profile será lido; se você efetuar login com xdm, ~/.profile não será lido.

Todos os sistemas que eu conheço fornecem alguma maneira de configurar variáveis de ambiente por usuário. Infelizmente não há resposta geral.

Observe que às vezes você verá recomendações para definir variáveis de ambiente em ~/.bashrc ou iniciar um shell de login em cada terminal em um ambiente de GUI. Ambas são idéias ruins; Uma das razões é o problema que você teve, ou seja, que suas variáveis de ambiente só estavam disponíveis em programas iniciados através de um terminal, e não em programas iniciados diretamente com um ícone ou menu ou atalho de teclado.

    
por 02.09.2010 / 20:17
2

A resposta definitiva está na seção bash man page 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."

Responde às suas outras perguntas que o eshell não executa bash . Emacs eshell não é bash . Supor que eshell carregaria .bashrc é tão defeituoso quanto assumir zsh ou csh carregaria .bashrc . É um shell diferente.

Eu vejo duas opções:

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

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

    
por 02.09.2010 / 16:04
1

A configuração do seu PATH no seu ~ / .profile deve funcionar. Esse arquivo é lido após o login por cada shell compatível com POSIX ou Bourne que eu conheço, incluindo o bash. Se você fizer alterações nesse arquivo, será necessário efetuar logout e efetuar login novamente para que as alterações entrem em vigor. Como o PATH faz parte do ambiente do seu processo de login, ele deve ser exportado para todos os shell que você iniciar posteriormente.

    
por 02.09.2010 / 17:38

Tags