Estos son los contenidos del stock ~/.profileque vino con mi 13.10 (líneas comentadas eliminadas):
if [ -n "$BASH_VERSION" ]; then
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Esto se hereda de Debian, pero ¿por qué Canonical decidió conservarlo? Hasta donde sé, no es la forma estándar * nix y he visto varios sistemas en los que esto no sucedió, por lo que supongo que deben haber tenido una buena razón para hacerlo. Esto puede causar un comportamiento inesperado cuando se ejecutan shells de inicio de sesión (por ejemplo, cuando se sshing en la máquina) donde el usuario no esperaría haber ~/.bashrcoriginado.
El único beneficio que se me ocurre es no confundir al usuario con muchos archivos de inicio y permitirle editar .bashrcsolo y tener esa lectura independientemente del tipo de shell. Sin embargo, eso es un beneficio dudoso, ya que a menudo es útil tener diferentes configuraciones para iniciar sesión y para shells interactivos y esto le impide hacerlo. Además, los shells de inicio de sesión a menudo no se ejecutan en un entorno gráfico y eso puede causar errores, advertencias y problemas (¡oh, Dios mío!) Dependiendo de lo que haya configurado en esos archivos.
Entonces, ¿por qué Ubuntu hace esto? ¿Qué me estoy perdiendo?

-n "$BASH_VERSION"cierto fuera de bash?.profilefuente.bashrc, ese no es el caso en todas las versiones de Linux y me pregunto cuál es la razón detrás de esto.Respuestas:
Esta es una decisión previa proveniente de Debian. La razón para ello se explica en esta muy bonita publicación wiki , de la cual lo siguiente es un extracto. El resumen ejecutivo es "para garantizar que los inicios de sesión GUI y no GUI funcionen de la misma manera":
fuente
Este es el comportamiento estándar de Ubuntu,
~/.bashrces un archivo de inicio de nivel de usuario por shell interactivo. Cuando abre un terminal, básicamente inicia un shell interactivo sin inicio de sesión que lee~/.bashrcy el contenido~/.bashrcse obtiene y exporta a su entorno de shell actual. Ayuda a uno a obtener todas sus variables y funciones de shell definidas por el usuario en el shell actual. También puedes encontrar líneas como estapara obtener alias definidos por el usuario en el entorno actual del shell.
Esto es importante para proporcionar una buena experiencia de usuario también. Por ejemplo, uno podría almacenar en la credencial de proxy
.bashrc, a menos que conseguir ninguna de las aplicaciones del terminal de origen ( es decir ,ping,wget,curl,lynxetc.) funcionará correctamente. O debe proporcionar las credenciales de proxy cada vez que abra un terminal.Además, el valor predeterminado de Ubuntu
.bashrccontiene muchos alias fáciles de usar (paralsegrepimprimir resultados coloreados), muchas definiciones nuevas para diferentes variables de shell que aumenta la experiencia del usuario.Pero en el caso de su inicio de sesión ssh , o inicio de sesión en la consola virtual , básicamente obtiene un shell de inicio de sesión interactivo. Allí está el archivo de inicio de shell
~/.profile. Por lo tanto, a menos que fuente~/.bashrcse olvida de todos esos parámetros interesantes en tu.bashrc. Es por eso que la~/.profilefuente predeterminada de Ubuntu~/.bashrcCaso para evitar
~/.profileformulario~/.bashrcen el interior al mismo tiempo cuando~/.bashrcse obtiene~/.profile. Creará un bucle infinito de situación y, como resultado, su solicitud de terminal se suspenderá a menos que presione Ctrl+ C. En tal situación si pones una línea en tu~/.bashrcEntonces podría ver que el descriptor de archivo se detiene cuando abre un terminal.
fuente
.profileabastecimiento.bashrc? SuSe Enterprise 10 no lo hace, tampoco ninguna de las versiones de Fedora que he usado, pero eso fue hace años, puedo estar equivocado. CentOS 5.8 hace bastante extraño. De todos modos, ¿ves mi punto? Esta es una opción de diseño y me pregunto por qué se hizo..bashrco en.bash_aliases. Por ejemplo, tengo un aliaslscomols --color=autoen my.bashrcy.bashrcobtuve mi.profile. Aquí puedo usar el alias incluso de ssh. O podría usar proxy en la sesión ssh. Si no mi fuente.bashrcde.profilepierdo esas características. Creo que se trata de una mejor experiencia de usuario..bashrcarregla eso. Pero también causa problemas. Recuerdo que la primera vez que usé un sistema que tenía este comportamiento, seguía recibiendo estos mensajes extraños cuandosshlo utilizaba porque estaba usandoxset b offel.bashrcque solía deshabilitar la campana del terminal, pero solo en un sistema X, por lo que estaba dando mensajes de error. Me llevó mucho tiempo descubrir qué estaba pasando, ya que no pensé que.bashrcse leería al ejecutar un shell de inicio de sesión. Me pregunto si hay una declaración "oficial" sobre esto.