Entorno de shell: variables de entorno, PATH, .bashrc, .bash_profile,
aliases
Introducción
Antes de escribir scripts, es fundamental entender el entorno en que se ejecutan. El shell mantiene un conjunto de variables y configuraciones que determinan su comportamiento y el de todos los programas que lanza. Personalizar ese entorno es el objetivo del LPIC-1 105.1.
Variables de entorno
Las variables de entorno son pares clave=valor que el shell pasa automáticamente a todos los procesos hijos. A diferencia de las variables de shell normales, están disponibles en cualquier programa, no solo en el script actual.
Ver variables de entorno:
$ env # todas las variables de entorno
$ printenv # igual que env
$ printenv HOME # valor de una variable concreta
$ echo $HOME # también funciona
Variables más importantes:
HOME→ directorio personal del usuario (/home/juan)USER→ nombre del usuario actualPATH→ rutas donde el shell busca ejecutablesSHELL→ ruta al shell en uso (/bin/bash)PWD→ directorio de trabajo actualOLDPWD→ directorio anterior (usado porcd -)LANG/LC_ALL→ idioma y locale del sistemaEDITOR→ editor de texto por defectoPS1→ formato del prompt del shellHISTSIZE→ número de comandos que guarda el historial
Definir y exportar variables:
# Variable de shell (solo disponible en el shell actual)
NOMBRE="Juan"
echo $NOMBRE
# Variable de entorno (disponible para los procesos hijos)
export NOMBRE="Juan"
export EDITOR=vim
# Definir y exportar en una sola línea
export MI_VAR="valor"
# Variable temporal solo para un comando
MI_VAR="prueba" env | grep MI_VAR
Eliminar una variable:
unset NOMBRE
PATH — Rutas de búsqueda de ejecutables
Cuando escribes un comando, el shell lo busca en cada directorio listado en PATH, en orden, hasta
encontrarlo. Si no lo encuentra en ninguno, devuelve "command not found".
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/juan/bin
# Ver dónde está un ejecutable
$ which python3
/usr/bin/python3
$ type ls
ls es un alias de 'ls --color=auto'
Añadir un directorio al PATH:
# Añadir al final (menor prioridad)
export PATH="$PATH:/opt/miapp/bin"
# Añadir al principio (mayor prioridad)
export PATH="/opt/miapp/bin:$PATH"
Para que sea permanente, añadir la línea export al fichero de configuración del shell.
Ficheros de configuración del shell
Bash carga distintos ficheros de configuración según el tipo de sesión. Entender cuál aplica en cada caso es importante para saber dónde poner la configuración.
Tipos de shell:
- Login shell: el primer shell que se inicia al entrar al sistema (SSH, TTY). Lee
/etc/profiley luego el primero que encuentre de:~/.bash_profile,~/.bash_login,~/.profile. - Interactive non-login shell: terminal abierta dentro de una sesión gráfica. Lee
/etc/bash.bashrcy luego~/.bashrc. - Non-interactive shell: scripts ejecutados sin terminal. No lee ficheros de configuración
(salvo que
BASH_ENVesté definida).
Ficheros principales:
/etc/profile ← configuración global para todos los usuarios (login shell)
/etc/profile.d/*.sh ← scripts cargados por /etc/profile (paquetes del sistema)
/etc/bash.bashrc ← configuración global para shells interactivos
~/.bash_profile ← configuración personal del login shell
~/.bashrc ← configuración personal del shell interactivo
~/.bash_logout ← se ejecuta al cerrar un login shell
Práctica habitual:
La mayoría de usuarios pone toda su configuración en ~/.bashrc y hace que
~/.bash_profile lo cargue:
# Contenido de ~/.bash_profile
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Aplicar cambios sin reiniciar la sesión:
source ~/.bashrc
. ~/.bashrc # equivalente con el punto
Aliases — Atajos de comandos
Un alias es un nombre corto que sustituye a un comando más largo. Se definen con alias
y normalmente se guardan en ~/.bashrc para que persistan.
# Definir alias
alias ll='ls -lh'
alias la='ls -lha'
alias grep='grep --color=auto'
alias ..='cd ..'
alias ...='cd ../..'
alias update='sudo apt update && sudo apt upgrade -y'
# Ver todos los aliases definidos
alias
# Ver un alias concreto
alias ll
# Eliminar un alias
unalias ll
# Ejecutar el comando real ignorando el alias
\ls
command ls
Los aliases solo están disponibles en shells interactivos; en scripts no se expanden por defecto. Para funcionalidad reutilizable en scripts, usar funciones.
Opciones del shell: set y shopt
Bash permite activar y desactivar opciones que modifican su comportamiento.
set — opciones básicas del shell:
set -o # listar todas las opciones y su estado
set -e # salir si un comando falla (errexit)
set -u # error si se usa variable no definida (nounset)
set -x # modo depuración: muestra cada comando antes de ejecutarlo
set +x # desactivar modo depuración
shopt — opciones extendidas de bash:
shopt # listar todas las opciones shopt
shopt -s globstar # activar: ** expande recursivamente directorios
shopt -s histappend # activar: añadir al historial en lugar de sobreescribir
shopt -u nullglob # desactivar una opción