Estos son los contenidos del stock ~/.profile
que 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 ~/.bashrc
originado.
El único beneficio que se me ocurre es no confundir al usuario con muchos archivos de inicio y permitirle editar .bashrc
solo 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?.profile
fuente.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,
~/.bashrc
es 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~/.bashrc
y el contenido~/.bashrc
se 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
,lynx
etc.) funcionará correctamente. O debe proporcionar las credenciales de proxy cada vez que abra un terminal.Además, el valor predeterminado de Ubuntu
.bashrc
contiene muchos alias fáciles de usar (parals
egrep
imprimir 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~/.bashrc
se olvida de todos esos parámetros interesantes en tu.bashrc
. Es por eso que la~/.profile
fuente predeterminada de Ubuntu~/.bashrc
Caso para evitar
~/.profile
formulario~/.bashrc
en el interior al mismo tiempo cuando~/.bashrc
se 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~/.bashrc
Entonces podría ver que el descriptor de archivo se detiene cuando abre un terminal.
fuente
.profile
abastecimiento.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..bashrc
o en.bash_aliases
. Por ejemplo, tengo un aliasls
comols --color=auto
en my.bashrc
y.bashrc
obtuve mi.profile
. Aquí puedo usar el alias incluso de ssh. O podría usar proxy en la sesión ssh. Si no mi fuente.bashrc
de.profile
pierdo esas características. Creo que se trata de una mejor experiencia de usuario..bashrc
arregla 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 cuandossh
lo utilizaba porque estaba usandoxset b off
el.bashrc
que 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.bashrc
se leería al ejecutar un shell de inicio de sesión. Me pregunto si hay una declaración "oficial" sobre esto.