¿Por qué necesito ejecutar "/ bin / bash --login"


12

Acabo de configurar un nuevo servidor Ubuntu 13.10 con ruby ​​2.1.1 instalado a través de rvm.

El problema es que cada vez que cambio al usuario "rails" (el usuario con el que instalé ruby ​​and rails) tengo que ejecutar /bin/bash --loginantes de que Ubuntu reconozca que ruby, rails o rvmestá instalado.

Espero que alguien sepa:

  1. ¿Qué hace el comando anterior?
  2. ¿Por qué necesito ejecutarlo?
  3. ¿Y qué puedo hacer para resolverlo de una vez por todas? :)

Cualquier ayuda es apreciada!


2
¿Cómo se está cambiando a los "carriles" del usuario (simple su? O algo como su -lo su --?). ¿Cuál es el shell de inicio de sesión para los "carriles" del usuario? ¿Modificó la variable PATH del usuario y, de ser así, en qué archivo ( ~/.profileo ~/.bashrco ~/.bash_profileo ...?)
steeldriver

Ahora veo que el problema solo ocurre cuando uso el comando su para cambiar de usuario root a usuario rails. Cuando me comunico con el usuario de rails, este problema no ocurre. Sin embargo, todavía me gustaría saber qué hace / bin / bash --login. :)
Ole Henrik Skogstrøm

Respuestas:


11

Parece que el entorno necesario para que el sistema encuentre los componentes ruby ​​instalados se especifica en un archivo que solo se lee para los shells de inicio de sesión. La página del manual de bash tiene esto que decir sobre la diferencia entre los shells de inicio de sesión y los shells de no inicio de sesión:

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

y

   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.  

mientras

   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. 

Por lo tanto, si las variables de entorno ruby ​​están en /home/rails/.profileo /etc/profilepor ejemplo, se agregarán al entorno de shell

  • invocando explícitamente un shell de inicio de sesión usando su -l railso su --login railso la taquigrafíasu - rails
  • cuando el usuario railsinicia sesión a través de SSH
  • iniciando una subshell como bash --logindespués de iniciar sesión

Si desea establecer el entorno de ruby ​​independientemente de cómo cambie al usuario rails, puede mover las definiciones de variables relevantes al usuario ~/.bashrc.


Hmmm, ok, creo que necesito un ejemplo de la última parte. Soy nuevo en Linux y Ubuntu. ¿Cuáles son las definiciones de variables relevantes? ¿En qué archivo están escritos ahora? ¿Podrías darme un ejemplo? Esto es un poco teórico.
Ole Henrik Skogstrøm

5

Sé que esta pregunta se hizo hace 2 años, pero en caso de que alguien (como yo) todavía la esté enfrentando: @steeldriver tiene razón: te falta algo bashrcque tienes en uno de esos 3 archivos. En mi caso, solo necesitaba agregar esta línea a la mía ~/.bashrc:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.