/ etc / profile não está sendo originado

43

Para o 11.04, fiz uma nova instalação do meu sistema. Parte dessa instalação foi instalar o rvm , que coloca um rvm.sh em /etc/profile.d/ . Isso não funciona porque /etc/profile (que carrega cada + r em /etc/profile.d/*.sh ) não está sendo carregado. De acordo com a documentação, o perfil é apenas originado se o bash for executado no login. Para verificar isso, invoquei bash --login , após o qual rvm estava disponível.

Isso funcionou para mim nas versões anteriores do Ubuntu, sem qualquer configuração. Ou seja, uma nova instalação de 10.10 irá fornecer corretamente o perfil / .d.

A minha pergunta é: existe alguma coisa que eu esteja a fazer errado, ou existem algumas novas suposições feitas em Natty que quebraram isto? Minha solução atual é source /etc/profile in ~/.bashrc (o que é horrível, já que o perfil é destinado a carregar antes do bashrc, mas é o truque).

    
por Marc 05.05.2011 / 11:22

6 respostas

48

Por padrão, o gnome-terminal não inicia o bash como um shell de login (suponho que você esteja falando de bash iniciado dentro de um terminal gnome). Isso significa que o bash não lerá /etc/profile ou ~/.profile . Como você observou corretamente, o bash lerá esses arquivos se iniciado como um shell de login.

A solução rápida para o seu problema é configurar o gnome-terminal para iniciar o bash como um shell de login, para que ele leia /etc/profile . Para fazer isso você tem que habilitar "Executar Comando como um shell de login" no gnome-terminal "Profile Preferences" acessível a partir do menu Editar.

Eu não recomendo fazer isso porque isso atrapalha a distinção entre ~/.profile e ~/.bashrc . Idealmente ~/.profile deve fazer coisas que são necessárias apenas uma vez, durante o login, enquanto ~/.bashrc deve fazer coisas que são necessárias toda vez que o bash é iniciado.

Há uma pergunta e resposta no superusuário falando sobre a diferença entre bashrc e perfil . Leia lá para mais informações.

A partir da descrição do seu problema, parece que o script rvm precisa ser carregado apenas uma vez, durante o login. Até onde sei, o Ubuntu configurou o login gráfico para ler /etc/profile/ e ~/.profile . Isso significa que, depois de efetuar logout e login em uma vez, o script rvm deve estar ativo. Se ainda assim não funcionar, talvez o script rvm precise ser carregado para cada sessão bash. Se for esse o caso, bashrc é o local mais apropriado para o script.

    
por lesmana 05.05.2011 / 13:31
5

Existe, no entanto, um arquivo /etc/bash.bashrc que é lido pelo gnome-terminal e é o "arquivo .bashrc para todo o sistema para shells interativos do bash (1)."

Minha chamada para a função rvm, [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" , foi lá e funciona bem para os dois usuários desse sistema.

    
por Dmitri 13.02.2012 / 03:38
4

Instalar o RVM como multiusuário requer que o usuário execute este comando:

(porque o Ubuntu não fornece o /etc/profile.d no login)

echo '[[ -s "/etc/profile.d/rvm.sh" ]] && . "/etc/profile.d/rvm.sh" # Load RVM function' >> ~/.bashrc
    
por user50486 13.03.2012 / 21:07
0

se você tem ZSH ou OH-MY-ZSH, seu perfil é / etc / zprofile

    
por Hadi Farnoud 25.10.2013 / 11:52
0

Eu realmente encontrei para aqueles que não gostam de reiniciar totalmente suas caixas, a menos que seja absolutamente necessário o seguinte ...

Você não precisa reiniciar a máquina inteira para que as alterações em /etc/profile entrem em vigor. Tudo o que você precisa é que a GUI do Desktop do XWindows seja reiniciada, para que ele leia novamente as configurações (como se fosse para ser iniciado como parte de uma reinicialização do sistema).

Para mim, eu uso o xUbuntu, que usa o LightDM, mas você pode usar sub em qualquer executável chamado em sua área de trabalho atual.

Primeiro, você não pode usar um emulador de terminal dentro da própria GUI para fazer isso (pelo menos não com LightDM) você precisa usar SSH ou um console secundário (se você segurar Ctrl + Alt e pressionar F ou a tecla numérica, você deve sair do seu login ou tela gráfica da área de trabalho para uma janela de terminal simples). Eu também sugiro que você feche qualquer material de desktop remoto como VNC se estiver usando SSH (obviamente SSH pode ser conectado, você não quer que uma janela VNC aberta seja mostrada como 0 enquanto ele está tentando reiniciar, pois isso pode travar a reinicialização enquanto espera que você termine a sessão VNC).

Eu faço isso o tempo todo com SSH e é um grande salva-vidas, especialmente quando você não está fisicamente em sua máquina e não tem vontade de esperar por uma reinicialização completa e reconectar :-D

Agora, a parte fácil, uma vez em um terminal "secundário" ou problema SSH: (Sim, isso matará sua sessão atual, não se importe, salve documentos abertos ou trabalhos)

sudo service lightdm restart

espere um minuto, pois ele mata a área de trabalho e, em seguida, inicia-a novamente (isso pode levar alguns bons segundos quando as coisas são interrompidas e, em seguida, executadas novamente no início)

É isso aí, agora, quando você voltar para o console 0 ou for usar o VNC para conectar-se novamente, será recebido pelo prompt de login e login como normal e se você abrir um emulador de terminal e emitir o comando agora você não deve ter problemas, já que tudo foi reenviado, como se você tivesse reiniciado a máquina completamente.

Lembre-se, se você emitir sudo service lightdm restart [ou stop , start , whatever] de dentro do próprio ambiente de área de trabalho usando um emulador de terminal, o comando ficará parado e nada parecerá estar acontecendo. Isso ocorre porque você está atualmente usando esse console (também conhecido como display) 0 e, portanto, ele não pode ser totalmente desativado e voltar ao estado em que está aguardando que a área de trabalho não esteja em uso antes de executar o comando.

Última observação: Eu não tentei reiniciar o ambiente a partir da área de trabalho em um emulador de terminal e depois mudar para outro console que pode então reiniciá-lo, mas se você já está indo para mudar o console, então porque não apenas executar o comando de lá como deveria ser de qualquer maneira?

    
por Pariah 05.11.2014 / 16:19
-3

echo ".profile" > > ~ / .bashrc

Em seguida, abra outra janela. Eu acho que essa é a abordagem fácil.

    
por chris 16.11.2014 / 07:28

Tags