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 sin inicio de sesión: lee
~/.bashrc
Lea el manual de bash sobre los archivos de inicio para obtener más detalles.
Personalmente, creo que este comportamiento es extraño y aún 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 los shells que usará son shells interactivos.
- 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 cuando inicia sesión en su sistema.
- Un shell sin inicio de sesión es un shell que se inicia después del proceso de inicio de sesión.
La mayoría de los shells que ves son shells interactivos sin inicio de sesión . 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 bash iniciada dentro de gnome es un shell sin 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. Ese es un verdadero shell de inicio de sesión interactivo. 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 inicia después de haber iniciado sesión. Configurar gnome-terminal para iniciar bash como shell de inicio de sesión significa que comenzará bash utilizando la --login
opción.
Por lo general, desea que bash siempre lea ~/.bashrc
en un shell interactivo. Así es como recomiendo hacer eso:
Crea un ~/.bash_profile
archivo. 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
.
Pon 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:
~/.bash_profile
~/.profile
~/.bashrc
y si bash se inicia como un shell interactivo sin inicio de sesión:
~/.bashrc
Debes poner cosas que sean específicas de bash ~/.bashrc
y cosas que no sean específicas de bash ~/.profile
. Por ejemplo PATH
entra ~/.profile
y HISTCONTROL
entra ~/.bashrc
.
Tenga en cuenta que ~/.profile
no es bash específico. También se leen otros shells basados en texto (por ejemplo sh o ksh) y shells gráficos (gnome) ~/.profile
. Es por eso que no debes poner cosas específicas de bash ~/.profile
.
~/.bashrc
primer lugar, en el perfil. La falla está en rvm.~/.profile
.bashrc
relativo a lo que necesita hacer. Si el shell interactivo siempre lee, ¿.bashrc
debería ser antes o después.profile
? ¿Qué sucede si desea configurar algunas cosas en las.bashrc
que se.profile
da por sentado? ¿Y al mismo tiempo quieres que algunas cosas.bashrc
dependan de algo creado por.profile
? Ninguna orden de carga satisfará ambos escenarios.Esta no es una mala decisión de diseño, ni un error, ni un comportamiento esperado de proyectiles y terminales
Es simplemente un valor predeterminado desafortunado de una opción de configuración por perfil en Gnome Terminal, que puede solucionar fácilmente.
Vaya a Editar -> Preferencias de perfil .
Seleccione la pestaña Título y Comando .
¡Observe cómo la casilla de verificación Ejecutar comando como shell de inicio de sesión no está marcada! Revisalo.
Eso es. Si hace esto al
Default
perfil, o al perfil que esté configurado para usarse al hacer nuevas terminales, obtendrá un shell de inicio de sesión.Supongo que debajo del capó, esta opción probablemente hace que pase la
-l
opción al shell.fuente
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 del sistema rvm dedicado para un aislamiento completo y asigne una contraseña:
sudo su
useradd -m rvmuser
passwd rvmuser
2. Instale dependencias para que rvm pueda construir rubíes sin solicitar la contraseña de 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 hacerlo
apt-get install ssh
)ssh rvmuser@localhost
4. Instalar rvm
\curl -sSL https://get.rvm.io | bash -s stable
5. Cierre sesión y vuelva a iniciarla para que se carguen todas las funciones de rvm
exit
ssh rvmuser@localhost
6. Use rvm :)
fuente
Es común cuando se usa bash para colocar la inicialización del perfil
.bash_profile
, que se lee solo por bash al iniciar sesión, mientras que otros shells se han compartido históricamente.profile
. Esto le permite colocar comandos específicos de bash.bash_profile
.El uso de lo siguiente se hace comúnmente para extraer los alias que se definen en
.bashrc
:fuente