Configure gnome-terminal para iniciar bash como shell de inicio de sesión, no lee .bashrc

20

Estoy intentando integrar RVM con gnome-terminal .

Por defecto, gnome-terminal no inicia bash como un shell de inicio de sesión. He habilitado run command as a login shell como se sugiere en esta respuesta sobre el mismo tema que configura RVM, pero cuando lo hago, el .bashrc archivo no se lee.

Por ejemplo, creo una variable de entorno en .bashrc y luego, cuando inicio un nuevo terminal gnome, no puedo leerlo. Necesito ejecutar explícitamente source .bashrc para leer el archivo.

¿Es este el comportamiento esperado?

    
pregunta Arturo Herrero 05.05.2012 - 19:25

4 respuestas

35

Sí, ese es el comportamiento esperado.

El comportamiento, en resumen, es el siguiente:

  • bash comenzó como un shell de inicio de sesión interactivo: lee ~/.profile
  • bash comenzó como un shell interactivo que no inicia sesión: lee ~/.bashrc

Lea el manual bash sobre los archivos de inicio para obtener más información.

Personalmente, creo que este comportamiento es extraño y todavía no he encontrado una racionalización para esta decisión de diseño.

Alguna explicación de la terminología:

  • Un shell interactivo es un shell con el que puede interactuar, lo que significa que puede escribir comandos en él. La mayoría de las conchas que usarás son conchas interactivas.
  • Un shell no interactivo es un shell con el que no puede interactuar. Los scripts de Shell se ejecutan dentro de shells no interactivos.
  • Un shell de inicio de sesión es el shell que se inicia al iniciar sesión en su sistema.
  • Un shell non-login es un shell que se inicia después del proceso de inicio de sesión.

La mayoría de las conchas que ves son conchas de inicio de sesión no interactivas . Esto es especialmente cierto si está ejecutando un entorno gráfico como gnome, porque entonces gnome es el "shell de inicio de sesión". Cualquier sesión de bash que se inicie dentro de gnome es un shell que no es de inicio de sesión. Si desea ver un shell de inicio de sesión interactivo real, vaya a una consola virtual (usando Ctrl+Alt+F1 ) y luego inicie sesión con su nombre de usuario y contraseña. Es un shell de inicio de sesión interactivo real. Puede volver al shell gráfico usando Ctrl+Alt+F7 .

Hay una opción --login que hará que bash se comporte como si fuera un shell de inicio de sesión, incluso si se inició después de haber iniciado sesión. Configurar gnome-terminal para iniciar bash como un shell de inicio de sesión significa que comenzará bash usando el --login option.

Por lo general, quiere que bash siempre lea ~/.bashrc en un intérprete interactivo. Aquí es cómo recomiendo hacer eso:

Crea un archivo ~/.bash_profile . Si bash se inicia como un shell de inicio de sesión, primero buscará ~/.bash_profile antes de buscar ~/.profile . Si bash encuentra ~/.bash_profile , entonces no leerá ~/.profile .

Coloque las siguientes líneas en ~/.bash_profile :

[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"

Ahora, si bash se inicia como un shell de inicio de sesión interactivo, leerá los siguientes archivos:

  1. ~/.bash_profile
  2. ~/.profile
  3. ~/.bashrc

y si bash se inicia como un shell interactivo que no inicia sesión:

  1. ~/.bashrc

Debes poner cosas que sean bash específicas en ~/.bashrc y cosas que no sean bash específicas en ~/.profile . Por ejemplo, PATH va en ~/.profile y HISTCONTROL va en ~/.bashrc .

Tenga en cuenta que ~/.profile no es específico de bash. Otros shells basados ​​en texto (por ejemplo, sh o ksh) y shells gráficos (gnome) también leen ~/.profile . Es por eso que no deberías poner cosas específicas de bash en ~/.profile .

    
respondido por el lesmana 05.05.2012 - 20:44
7

Esta no es una mala decisión de diseño, ni un error, ni un comportamiento esperado de los proyectiles y terminales

Es simplemente un desafortunado valor predeterminado de una opción de configuración por perfil en Gnome Terminal, que puede solucionar fácilmente.

  1. Ir a Editar - & gt; Preferencias de perfil .

  2. Seleccione la pestaña Título y comando .

  3. ¡Observe cómo la casilla Ejecutar comando como shell de inicio de sesión está desmarcada! Compruébalo.

Eso es todo. Si hace esto en el perfil Default , o en el perfil que esté configurado para usarlo al crear nuevos terminales, obtendrá un shell de inicio de sesión.

Supongo que, bajo el capó, esta opción probablemente haga que pase la opción -l al shell.

    
respondido por el Guest 17.03.2015 - 23:32
0

Tuve la misma pregunta y encontré una solución: simplemente use SSH para un shell de inicio de sesión real.

1. Como superusuario, cree un usuario de sistema rvm dedicado para aislamiento completo y asigne una contraseña:

sudo su

useradd -m rvmuser

passwd rvmuser

2. Instale dependencias para que rvm pueda generar rubíes sin pedir la contraseña del superusuario:

apt-get install curl gawk libreadline6-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake bison libffi-dev

3. SSH en localhost para un shell de inicio de sesión real (puede que tenga que apt-get install ssh )

ssh rvmuser@localhost

4. Instalar rvm

\curl -sSL https://get.rvm.io | bash -s stable

5. Cierre la sesión y vuelva a iniciarla para que se carguen todas las funciones de rvm

exit

ssh rvmuser@localhost

6. Use rvm:)

    
respondido por el Michael Franzl 30.06.2014 - 06:15
0

Cuando se utiliza bash para colocar la inicialización de perfil en .bash_profile , que es leída solo por bash en el inicio de sesión, mientras que otras shells han compartido históricamente .profile . Esto le permite colocar comandos específicos de bash en .bash_profile .

El uso de lo siguiente se realiza comúnmente para obtener los alias definidos en .bashrc :

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
    
respondido por el Rob Prentice 11.04.2016 - 00:56

Lea otras preguntas en las etiquetas