Por que preciso executar o “/ bin / bash --login”

8

Acabei de configurar um novo servidor Ubuntu 13.10 com o ruby 2.1.1 instalado através de rvm .

O problema é que sempre que eu mudo para o usuário "rails" (o usuário com o qual eu instalei o ruby e o rails) eu tenho que executar /bin/bash --login antes que o Ubuntu reconheça que ruby, rails ou rvm estão instalados. >

Espero que alguém saiba:

  1. O que o comando acima faz?
  2. por que preciso executá-lo?
  3. e o que posso fazer para resolvê-lo de uma vez por todas? :)

Qualquer ajuda é apreciada!

    
por Ole Henrik Skogstrøm 08.04.2014 / 10:59

2 respostas

10

Parece que o ambiente necessário para o sistema encontrar os componentes ruby instalados é especificado em um arquivo que só é lido para os shells de login. A página de manual do bash tem isto a dizer sobre a diferença entre shells de login e shells não-login:

INVOCATION
   A  login shell is one whose first character of argument zero is a -, or
   one started with the --login option.

e

   When bash is invoked as an interactive login shell, or as a non-inter‐
   active shell with the --login option, it first reads and executes  com‐
   mands  from  the file /etc/profile, if that file exists. After reading
   that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile,
   in  that order, and reads and executes commands from the first one that
   exists and is readable.  

enquanto

   When an interactive shell that is not a login shell  is  started,  bash
   reads  and  executes  commands  from /etc/bash.bashrc and ~/.bashrc, if
   these files exist. 

Portanto, se as variáveis do ambiente ruby estiverem em /home/rails/.profile ou /etc/profile , por exemplo, elas serão adicionadas ao ambiente de shell

  • ao invocar explicitamente um shell de login usando su -l rails ou su --login rails ou o atalho su - rails
  • quando o usuário rails efetua login via SSH
  • iniciando um subshell como bash --login após o login

Se você quiser que o ambiente ruby seja definido, independentemente de como você muda para o usuário rails , você pode mover as definições de variáveis relevantes para o usuário ~/.bashrc .

    
por steeldriver 08.04.2014 / 16:43
0

Eu sei que essa pergunta foi feita há dois anos, mas no caso de alguém (como eu) ainda estar com ela: @steeldriver está certo - você está perdendo algo no seu bashrc que você tem em um desses 3 arquivos. No meu caso eu só precisava adicionar essa linha no meu ~/.bashrc :

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
    
por PepeHands 07.07.2016 / 17:00