Problema
Eu tenho uma máquina virtual Ubuntu 11.04 e queria configurar meu ambiente de desenvolvimento Java. Fiz o seguinte
sudo apt-get install openjdk-6-jdk
Adicionadas as seguintes entradas ao ~ / .bash_profile
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk export PATH=$PATH:$JAVA_HOME/bin
Salve as alterações e saia
Abra um terminal novamente e digite o seguinte
echo $JAVA_HOME (blank) echo $PATH (displayed, but not the JAVA_HOME value)
Nada aconteceu, como se a exportação de JAVA_HOME e sua adição ao PATH nunca fosse feita.
Solução
Eu tive que ir para ~ / .bashrc e adicionar a seguinte entrada no final do arquivo
#Source bash_profile to set JAVA_HOME and add it to the PATH because for some reason is not being picked up
. ~/.bash_profile
Questões
- Por que eu tenho que fazer isso? Eu pensei que bash_profile, bash_login ou perfil na ausência desses dois fosse executado primeiro antes do bashrc.
- Nesse caso, meu terminal era um shell sem login ?
- Se sim, por que ao fazer su após o terminal e colocar a senha, ele não executou o perfil onde eu também havia definido as exportações mencionadas acima?
.profile
só deve ser adquirido quando você entrar..profile
é ignorado pelo bash, se.bash_profile
existir. Veja minha resposta aqui eman bash
para mais detalhes..profile
.Você pode verificar se o seu shell Bash foi iniciado como um shell de login executando:
Se a resposta for
off
você não está executando um shell de logon.Leia a seção de chamada do manual do Bash sobre como o Bash lê (ou não lê) arquivos de configuração diferentes.
Trecho de
man bash
:su
por outro lado, também não inicia um shell de login por padrão, você deve solicitar que ele faça isso usando a--login
opçãofonte
Eu acho que vale a pena mencionar que você pode alterar o padrão do gnome-terminal para usar um shell de login (ou seja, bash -l) editando as preferências do perfil.
vá para Editar -> Preferências do perfil -> guia Título e comando, marque a opção "Executar comando como um shell de login"
fonte
~/.bash_profile
está avaliando muito rapidamente, o que provavelmente é o caso. Uma boa coisa a verificar é perseguir todas as chamadas para outros processos que geralmente são bastante caros.Se você abrir um terminal ou executar,
su
o shell não será executado como um shell de login, mas como um shell interativo normal. Então lê,~/.bashrc
mas não~/.bash_profile
. Você pode executarsu
com a-l
opção de fazê-lo executar seu shell como um shell de logon.Quando você está trabalhando com uma GUI, o shell geralmente nunca é executado como um shell de logon, portanto, geralmente é bom colocar todas as suas coisas
~/.bashrc
.fonte
TL; DR
Na instalação clássica recomendada do ubuntu,
~/.bash_profile
é avaliada apenas em ocasiões específicas. E isso faz sentido.Coloque suas coisas
~/.bashrc
, elas serão avaliadas toda vez.Ok, eu quero entender, por que isso faz sentido?
Pontos principais para entender o que está acontecendo:
Portanto, o horário do "login" normalmente é:
ssh
, como o shell será o pai de todo o processo, ele carregará o seu~/.bash_profile
.gnome-session
para o ubuntu clássico) será responsável pela leitura.profile
.Ok, então onde colocar minhas coisas?
É bastante complexo, a história completa está aqui . Mas aqui está uma degradação bastante comum para usuários do Ubuntu. Então, considerando que:
bash
shell,~/.bash_profile
e segue a recomendação para adicionar o carregamento~/.bashrc
no seu~/.bash_profile
, a fim de obter pelo menos um arquivo que seja avaliado independentemente do mecanismo de chamada .Esta é uma sugestão rápida de onde colocar as coisas.
~ / .bashrc (é avaliado em todas as ocasiões , desde que você siga a recomendação)
Para -avaliação rápida variável de ambiente e código para o seu utilizador-apenas e só de festa de uso de linha de comando (aliases, por exemplo). bashism são bem-vindos.
Ele é carregado sobre si mesmo:
bash
screen
novo painel ou guia. (nãotmux
!)terminator
/gnome-terminal
...) se você não selecionar a opção "executar comando como shell de login".E ele será carregado em todas as outras ocasiões, graças à recomendação prévia.
~ / .bash_profile (é avaliado apenas em ocasiões específicas )
Para variável de ambiente de avaliação lenta e código para seus processos somente de usuário e sessão de console . bashism são bem-vindos. Ele é carregado em:
tmux
novo painel ou janelas (configurações padrão), (nãoscreen
!)bash -l
,terminator
/gnome-terminal
...) somente se você marcar a opção "executar comando como shell de login".~ / .profile (é avaliado apenas na sessão gráfica)
Para variáveis de ambiente de avaliação lenta e sem bashism para seus processos somente de usuário e todos os de sessão gráfica . Ele é carregado no login na sua interface gráfica.
fonte
.profile
se.bash_profile
não existir.env
aparecer, não vejo as variáveis env definidas (tentei fechar o iTerm e reabrir). Mas percebo que, quando instalei o Android studio e outros aplicativos, todos esses ambientes foram instalados/.bash_profile
. Então, quando eu adicionei/.bash_profile
, funcionou como charme. Por que é que?