Publicado en

Variables entorno Linux: qué son y cómo usarlas

Comandos export con variables de entorno sobre fondo oscuro

Una aplicación necesita saber dónde está la base de datos, qué puerto usar, si está en producción o en desarrollo. Puedes poner esa información directamente en el código, pero entonces el mismo código no funciona en otro entorno sin modificarlo. La solución estándar son las variables de entorno: configuración externa que el sistema inyecta en el proceso.

Qué es una variable de entorno

Una variable de entorno es un par nombre=valor que el sistema operativo pone a disposición de los procesos. Cada proceso hereda las variables del proceso que lo creó. La shell (Bash, Zsh) tiene su propio entorno y lo pasa a los programas que ejecuta.

# Ver todas las variables del entorno actual
env
printenv

# Ver el valor de una variable específica
echo $HOME
printenv PATH

# Ver una variable con valor por defecto si no existe
echo ${MI_VAR:-"valor por defecto"}

Declarar y exportar variables

El alcance de las variables en Bash: sistema, shell actual y proceso hijo. Solo las variables exportadas son heredadas por los procesos hijos

Hay una diferencia crucial entre declarar una variable y exportarla:

# Variable local: solo existe en la shell actual
MI_VAR="hola"
echo $MI_VAR  # → hola

# Si lanzas un subproceso, no la ve:
bash -c 'echo $MI_VAR'  # → (vacío)

# Variable exportada: se hereda por procesos hijos
export DB_HOST="localhost"
bash -c 'echo $DB_HOST'  # → localhost

# Declarar y exportar en un paso
export PORT=3000

# Exportar variable ya declarada
export MI_VAR

Hacerlas persistentes

Archivos de configuración del entorno en Linux (bashrc, profile, /etc/environment) y las variables especiales de Bash más usadas

Las variables que defines en la terminal desaparecen al cerrar la sesión. Para hacerlas persistentes, añádelas al archivo de inicio de tu shell:

# Para añadir al ~/.bashrc (se ejecuta en cada nueva terminal)
echo 'export MI_HERRAMIENTA=/opt/herramienta/bin' >> ~/.bashrc
echo 'export PATH="$PATH:/opt/herramienta/bin"' >> ~/.bashrc

# Recargar sin cerrar la terminal
source ~/.bashrc
# o equivalente:
. ~/.bashrc

Para el PATH especialmente, la forma correcta es añadir al existente, no sobreescribirlo: PATH="$PATH:/nueva/ruta".

En servidores o entornos donde múltiples usuarios necesitan las mismas variables, usa /etc/environment (formato KEY=VALUE sin export) o scripts en /etc/profile.d/.

Variables en scripts

#!/bin/bash

# Leer variable de entorno con valor por defecto
DB_HOST="${DB_HOST:-localhost}"
DB_PORT="${DB_PORT:-5432}"
APP_ENV="${APP_ENV:-development}"

# Verificar que existe una variable obligatoria
if [[ -z "${API_KEY:-}" ]]; then
  echo "Error: la variable API_KEY no está definida" >&2
  exit 1
fi

echo "Conectando a $DB_HOST:$DB_PORT en entorno $APP_ENV"

Las variables más importantes

  • $PATH: lista de directorios donde el sistema busca ejecutables. Si instalas algo y no aparece como comando, probablemente su directorio no está en el PATH.
  • $HOME: directorio del usuario (~ es un alias).
  • $USER: nombre del usuario actual.
  • $SHELL: intérprete activo (/bin/bash, /bin/zsh).
  • $?: código de salida del último comando (0 = éxito, cualquier otro = error).
  • $$: PID del proceso actual (útil en scripts para crear archivos temporales únicos).

El concepto de variables de entorno trasciende Linux: es la base de cómo las aplicaciones modernas gestionan la configuración entre entornos. Cómo hacer esto de forma segura en proyectos reales, con archivos .env que nunca llegan al repositorio, es algo que conecta directamente con el desarrollo de software y el despliegue en producción.