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 --loginque 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 --loginopción.
Por lo general, desea que bash siempre lea ~/.bashrcen un shell interactivo. Así es como recomiendo hacer eso:
Crea un ~/.bash_profilearchivo. Si bash se inicia como un shell de inicio de sesión, primero buscará ~/.bash_profileantes de buscar ~/.profile. Si bash encuentra, ~/.bash_profileentonces 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 ~/.bashrcy cosas que no sean específicas de bash ~/.profile. Por ejemplo PATHentra ~/.profiley HISTCONTROLentra ~/.bashrc.
Tenga en cuenta que ~/.profileno 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.
~/.bashrcprimer lugar, en el perfil. La falla está en rvm.~/.profile.bashrcrelativo a lo que necesita hacer. Si el shell interactivo siempre lee, ¿.bashrcdebería ser antes o después.profile? ¿Qué sucede si desea configurar algunas cosas en las.bashrcque se.profileda por sentado? ¿Y al mismo tiempo quieres que algunas cosas.bashrcdependan 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
Defaultperfil, 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
-lopció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 suuseradd -m rvmuserpasswd rvmuser2. 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-dev3. SSH en localhost para un shell de inicio de sesión real (puede que tenga que hacerlo
apt-get install ssh)ssh rvmuser@localhost4. Instalar rvm
\curl -sSL https://get.rvm.io | bash -s stable5. Cierre sesión y vuelva a iniciarla para que se carguen todas las funciones de rvm
exitssh rvmuser@localhost6. 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