Los ficheros de inicio de Bash

El intérprete de comandos /bin/bash (de aquí en adelante nos referiremos a él como "el intérprete") usa una colección de ficheros de inicio para ayudar a crear un entorno en el que ejecutarse. Cada fichero tiene un uso específico y puede afectar de manera diferente a entornos interactivos y de conexión. Los ficheros del directorio /etc generalmente proporcionan las configuraciones globales. Si en tu directorio personal existe un fichero equivalente, este puede prevalecer sobre las configuraciones globales.

Un intérprete interactivo de conexión se ejecuta después de una entrada al correcta sistema, mediante /bin/login, leyendo el fichero /etc/passwd. Un intérprete interactivo de no conexión se ejecuta mediante la línea de comandos (por ejemplo, [prompt]$/bin/bash). Un intérprete no interactivo está presente normalmente cuando se ejecuta un guión. Es no interactivo porque está procesando un guión y no está esperando a que el usuario introduzca un comando.

Para más información, consulta info bash -- Nodos: Bash Startup Files e Interactive Shells (Ficheros de inicio de Bash e Intérpretes Interactivos)

Se necesitan los siguientes ficheros para asegurarse que se lee el entorno correcto para cada una de las formas en que el intérprete puede ser invocado: /etc/profile y su equivalente privado ~/.bash_profile, y /etc/bashrc (no oficial) y su equivalente privado ~/.bashrc.

El fichero ~/.bash_logout no se usa para la invocación del intérprete. Es leído por este cuando un usuario sale del sistema.

Los ficheros /etc/profile y ~/.bash_profile son leídos cuando se ejecuta un intérprete interactivo de conexión. El fichero ~/.bashrc es leído cuando se ejecuta un intérprete interactivo de no conexion y lee /etc/bashrc si existe.

También son útiles los ficheros /etc/dircolors y ~/.dircolors, llamados por /etc/profile. Controlan la salida coloreada de cosas como ls --color.

Aquí se muestra un fichero /etc/profile básico. Los comentarios en el fichero deberían explicar todo lo que necesitas. Para más información de las secuencias de escape que puedes usar para el indicador del sistema (p.e la variable de entorno PS1) consulta info bash -- Nodo: Printing a Prompt.

cat > /etc/profile << "EOF"
# Inicio de /etc/profile
# Escrito para Más Allá de Linux From Scratch
# por James Robertson <jameswrobertson@earthlink.net>

# Variables de entorno del sistema y programas de inicio.

# Alias del sistema y funciones deberían estar en /etc/bashrc. Variables
# de entorno personales y programas de inicio deberían estar en
# ~/.bash_profile. Alias personales y funciones deberían estar en
# ~/.bashrc.

# Función para ayudarnos a manejar rutas
pathman () {
	if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
		if [ "$2" = "last" ] ; then
			PATH=$PATH:$1
		else
			PATH=$1:$PATH
		fi
	fi
}

# Añade a la ruta estándar.
if [ $(id -u) = 0 ] ; then
	if [ -d "/usr/local/sbin" ] ; then
		pathman /usr/local/sbin last
	fi
fi

if [ $(id -u) != 0 ] ; then
	if [ -d "/usr/local/bin" ] ; then
		pathman /usr/local/bin last
	fi
fi

if [ -d "/usr/X11R6/bin" ] ; then
	pathman /usr/X11R6/bin last
fi

# Define algunas variables de entorno.
HISTSIZE=1000
HISTIGNORE="&:[bf]g:exit"
PS1="[\u@\h \w]\\$ "

# Define la variable de entorno INPUTRC.
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
	INPUTRC=/etc/inputrc
fi

# Configuración de /bin/ls para soportar colores. Los alias están en /etc/bashrc.
if [ -f "/etc/dircolors" ] ; then
	eval $(dircolors -b /etc/dircolors)

	if [ -f "$HOME/.dircolors" ] ; then
		eval $(dircolors -b $HOME/.dircolors)
	fi
fi

export PATH HISTSIZE HISTIGNORE PS1 LS_COLORS INPUTRC

# Fin de /etc/profile
EOF

Aquí se muestra un fichero /etc/bashrc básico. Los comentarios en el fichero deberían explicar todo lo que necesitas.

cat > /etc/bashrc << "EOF"
# Inicio de /etc/bashrc
# Escrito para Más Allá de Linux From Scratch
# por James Robertson <jameswrobertson@earthlink.net>

# Alias del sistema y funciones.

# Variables de entorno del sistema y programas de inicio deberían estar en
# /etc/profile. Variables de entorno personales y programas de inicio deberían
# estar en ~/.bash_profile. Alias personales y funciones deberían estar en
# ~/.bashrc.

# Queremos configurar umask por defecto
# Incluso para intérpretes no interactivos y de no conexión.
if [ "$(id -gn)" = "$(id -un)" -a $(id -u) -gt 99 ] ; then
	umask 002
else
	umask 022
fi

# Proporciona un comando /bin/ls con colores. Usado junto con el código
# que está en /etc/profile.
alias ls='ls --color=auto'

# Proporciona un indicador de comandos para intérpretes no interactivos, más
# específicamente, intérpretes ejecutados desde el entorno xfree. [Busca en el
# archivo una discusión titulada "PS1 Environment Variable" si quieres ver un
# muy buen caso de estudio acerca de esto.] [addendum.]
export PS1="[\u@\h \w]\\$ "

# Fin de /etc/bashrc
EOF

Aquí se muestra un fichero ~/.bash_profile básico. Los comentarios en el fichero deberían explicar todo lo que necesitas. Si quieres que cada nuevo usuario tenga este fichero automáticamente, basta con que cambies la salida del siguiente comando a /etc/skel/.bash_profile y compruebes los permisos tras la ejecución del comando. Entonces puedes copiar /etc/skel/.bash_profile a los directorios personales de los usuarios que ya existan, incluido root, y estableces correctamente el grupo y propietario.

cat > ~/.bash_profile << "EOF"
# Inicio de ~/.bash_profile
# Escrito para Más Allá de Linux From Scratch
# por James Robertson <jameswrobertson@earthlink.net>

# Variables de entorno personales y programas de inicio

# Alias personales y funciones deberían estar en ~/.bashrc. Variables de
# entorno del sistema y programas de inicio deberían estar en /etc/profile.
# Alias del sistema y funciones están en /etc/bashrc.

if [ -f "$HOME/.bashrc" ] ; then
	source $HOME/.bashrc
fi

if [ -d "$HOME/bin" ] ; then
	pathman $HOME/bin last
fi

export PATH

# Fin de ~/.bash_profile
EOF

Aquí se muestra un fichero ~/.bashrc básico. Los comentarios en el fichero deberían explicar todo lo que necesitas. Los comentarios e instrucciones anteriores para usar /etc/skel para .bash_profile también son aplicables aquí. Solo los nombres de los ficheros de destino son diferentes.

cat > ~/.bashrc << "EOF"
# Inicio de ~/.bashrc
# Escrito para Más Allá de Linux From Scratch 
# por James Robertson <jameswrobertson@earthlink.net>

# Alias personales y funciones

# Variables de entorno personales y programas de inicio deberían estar en
# ~/.bash_profile.  Variables de entorno del sistema y programas de inicio
# están en /etc/profile.  Alias del sistema y funciones están en 
# /etc/bashrc. 

if [ -f "/etc/bashrc" ] ; then
	source /etc/bashrc
fi

# Fin de ~/.bashrc
EOF

Aquí se muestra un fichero ~/.bash_logout básico. Los comentarios en el fichero deberían explicar todo lo que necesitas. Comprobarás que el fichero ~/.bash_logout no incluye un comando clear. Esto es porque el borrado de la pantalla se indica en el fichero /etc/issue.

cat > ~/.bash_logout << "EOF"
# Inicio de ~/.bash_logout
# Escrito para Más Allá de Linux From Scratch
# por James Robertson <jameswrobertson@earthlink.net>

# Cosas que hacer cuando se salga del sistema.

# Fin de ~/.bash_logout
EOF

Si quieres utilizar las capacidades de dircolors ejecuta el siguiente comando. Los pasos anteriores para /etc/skel también pueden usarse para facilitar un fichero .dircolors cuando se añade un nuevo usuario. Como antes, basta con cambiar el nombre del fichero de salida en el siguiente comando y asegurar que los permisos, propietario y grupo son los correctos en los ficheros creados y/o copiados.

/bin/dircolors -p > /etc/dircolors

Ian Macdonald ha escrito una excelente colección de consejos y trucos para mejorar el entorno del intérprete de comandos. Puedes consultarla en http://www.caliban.org/bash/index.shtml