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
.