¿Qué es el archivo .bashrc?
Los shells Unix al iniciar leen el archivo .bashrc
y ejecutan los comandos escritos en él. ¿Qué es este archivo y qué es lo que ejecuta?
Los shells Unix al iniciar leen el archivo .bashrc
y ejecutan los comandos escritos en él. ¿Qué es este archivo y qué es lo que ejecuta?
En realidad, es bash
específicamente que dice .bashrc
(y /etc/bash.bashrc
). Hay muchos shells diferentes.
La página de bash man (de Brian Fox y Chet Ramey; también página de información “Bash Startup Files” ) es la referencia autorizada:
Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, bash lee y ejecuta los comandos de
~/.bashrc
, si ese archivo existe. Esto puede ser inhibido usando la opción--norc
. La opción--rcfile
file obligará a bash a leer y ejecutar comandos desde un archivo en lugar de~/.bashrc
.Cuando se inicia bash de forma no interactiva, para ejecutar un script de shell, por ejemplo, busca la variable
BASH_ENV
en el entorno, expande su valor si aparece allí y utiliza el valor expandido como el nombre de un archivo para leer y ejecutar. Bash se comporta como si se ejecutara el siguiente comando:if [-n "$BASH_ENV"]; then . "$BASH_ENV"; fi
pero el valor de la variable
PATH
no se utiliza para buscar el nombre del archivo.
El archivo es sólo comandos de shell. Se usa típicamente para cambiar los avisos, establecer las variables de entorno y definir los procedimientos del shell. Tradicionalmente, el archivo .profile
se usa para este propósito, pero bash
tiene tantas extensiones que necesita su propio archivo de inicio para los usuarios que quieren poner bashismos en los archivos de inicio.
“Not a login shell” significa cosas como lanzamientos de scripts y normalmente ventanas de terminal iniciadas por gestores de ventanas. A veces configuro los sistemas *nix para que tengan .bashrc
y BASH_ENV
sólo la fuente .profile
. Siempre y cuando no te desvíes de los comandos de shell de POSIX, entonces obtendrás la misma inicialización en cualquier shell.
Es particularmente valioso cuando sh
es realmente bash
, lo que a veces sucede. Una razón por la que todo esto es tan complejo es porque a veces la gente pone cosas que producen salida en los archivos de inicio de la shell, o establecen incondicionalmente los comandos. Esto causa muchos problemas cuando se ejecutan programas de shell y comandos de retroceso dentro de los lenguajes, sin mencionar system(3)
de los programas de C. La forma en que bash
se inicia está diseñada, creo, para tener un archivo donde la salida y la configuración del prompt está bien y un archivo donde no lo está. Tradicionalmente, se hacía una prueba de ejecución para distinguir la interactividad, por ejemplo, comprobando si el prompt está configurado.
Cuando Bash se inicia, ejecuta los comandos en una variedad de diferentes scripts.
Cuando Bash es invocado como un shell de inicio de sesión interactivo, primero lee y ejecuta los 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 comandos desde el primero que existe y es legible.
Cuando se inicia 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 del ~/.bashrc, si existe ese archivo. Esto puede ser inhibido usando la opción –norc. La opción –rcfile file forzará a Bash a leer y ejecutar comandos desde un archivo en lugar de ~/.bashrc. http://en.wikipedia.org/wiki/Bash_(Unix_shell)
He aquí algunos trucos y consejos: http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html
Intentemos configurar el prompt para que muestre la fecha de hoy y el nombre del host:
PS1="\d \h $ "
Debería contener varios comandos de “inicialización” para su shell, por ejemplo:
alias ll='ls -l'
).