.bashrc
y NO.bash_profile
son guiones. Son archivos de configuración que se obtienen cada vez que se ejecutan de una de dos maneras:bash
- interactivo
- iniciar sesión
La sección de INVOCACIÓN de la página de manual de bash es lo relevante.
Un shell de inicio de sesión es aquel cuyo primer carácter del argumento cero es a -
, o uno que comenzó con la --login
opción.
Un shell interactivo es uno que se inicia sin argumentos sin opciones y sin la -c
opción cuya entrada estándar y error están conectados a los terminales (según lo determinado por isatty(3))
, o uno que comenzó con la -i
opción. PS1 se configura e $-
incluye i
si bash
es interactivo, lo que permite un script de shell o un archivo de inicio para probar este estado.
Los siguientes párrafos describen cómo bash
ejecuta sus archivos de inicio. Si alguno de los archivos existe pero no se puede leer, bash informa de un error. Tildes se expanden en los nombres de archivo como se describe a continuación en
Expansión de Tilde en la sección EXPANSIÓN .
Cuando se invoca bash como un shell de inicio de sesión interactivo , o como un shell no interactivo con la --login
opción, primero lee y ejecuta comandos del archivo /etc/profile
, si ese archivo existe. Después de leer ese archivo, busca ~/.bash_profile
,
~/.bash_login
y ~/.profile
, en ese orden, y lee y ejecuta órdenes desde el primero que existe y es legible. La
--noprofile
opción se puede usar cuando se inicia el shell para inhibir este comportamiento.
Cuando sale un shell de inicio de sesión, bash lee y ejecuta comandos del archivo ~/.bash_logout
, si existe.
Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, bash lee y ejecuta comandos desde ~/.bashrc
, si ese archivo existe. Esto puede inhibirse mediante el uso de la --norc
opción. La --rcfile file
opción obligará a bash a leer y ejecutar comandos desde el archivo en lugar de ~/.bashrc
.
Puede controlar cuándo se cargan a través de los interruptores de línea de comando, --norc
y --noprofile
. También puede anular la ubicación de donde se cargan usando el --rcfile
interruptor.
Como otros han mencionado, puede imitar cómo se cargan estos archivos mediante el uso del source <file>
comando o el uso del . <file>
comando.
Es mejor pensar en esta funcionalidad de la siguiente manera:
- bash comienza con un entorno desnudo
- bash luego abre uno de estos archivos (dependiendo de cómo se invocó como interactivo o inicio de sesión, y luego ...
- ... línea por línea ejecuta cada uno de los comandos dentro del archivo ...
- cuando se completa da el control en forma de mensaje, esperando la entrada
Métodos para invocar
Este tema parece surgir de vez en cuando, así que aquí hay una pequeña hoja de trucos de las diversas formas de invocar bash
y en qué dan lugar. NOTA: Para ayudar, agregué los mensajes "fuente $ HOME / .bashrc" y "fuente $ HOME / .bash_profile "a sus respectivos archivos.
llamadas básicas
bash -i
$ bash -i
sourced /home/saml/.bashrc
bash -l
$ bash -l
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash -il -o- bash -li
$ bash -il
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash -c "..cmd .."
$ bash -c 'echo hi'
hi
NOTA: ¡ Observe que el -c
interruptor no originó ninguno de los archivos!
deshabilitar la lectura de los archivos de configuración
bash --norc
$ bash --norc
bash-4.1$
bash --noprofile
$ bash --noprofile
sourced /home/saml/.bashrc
bash --norc -i
$ bash --norc -i
bash-4.1$
bash --norc -l
$ bash --norc -l
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash --noprofile -i
$ bash --noprofile -i
sourced /home/saml/.bashrc
bash --noprofile -l
$ bash --noprofile -l
bash-4.1$
bash --norc -i -o- bash --norc -l
$ bash --norc -c 'echo hi'
hi
Más formas esotéricas de llamar a bash
bash --rcfile $ HOME / .bashrc
$ bash -rcfile ~/.bashrc
sourced /home/saml/.bashrc
bash --norc --rcfile $ HOME / .bashrc
$ bash --norc -rcfile ~/.bashrc
bash-4.1$
Estos fallaron
bash -i -rcfile ~ / .bashrc
$ bash -i -rcfile ~/.bashrc
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash: /home/saml/.bashrc: restricted: cannot specify `/' in command names
bash -i -rcfile .bashrc
$ bash -i -rcfile .bashrc
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash: .bashrc: command not found
Probablemente hay más, pero entiendes el punto, con suerte ...
¿Qué más?
Por último, si está tan fascinado con este tema que le gustaría leer / explorar más sobre él, le sugiero que consulte la Guía para principiantes de Bash, específicamente la sección: 1.2. Ventajas del Bourne Again SHell . Las distintas subsecciones bajo esa, "1.2.2.1. Invocación" a través de "1.2.2.3.3. Comportamiento interactivo del shell" explican las diferencias de bajo nivel entre las diversas formas en que puede invocar bash
.