Variables de Entorno

Variables de entorno - Panel de control de NERV con configuraciones del sistema

Las variables de entorno son variables especiales que configuran cómo funciona tu sistema y los programas que ejecutas.


¿Qué son las Variables de Entorno?

Son variables que:

  • Existen para todos los programas que ejecutas
  • Configuran el comportamiento del sistema
  • Se heredan de proceso padre a proceso hijo
graph TD
    A[Terminal - Bash] --> B[Programa 1]
    A --> C[Programa 2]
    A --> D[Python]
    E[Variables de Entorno] --> A
    E --> B
    E --> C
    E --> D

Variables de Entorno vs Variables Normales

Tipo Alcance Ejemplo
Variable normal Solo en el shell actual mi_var="algo"
Variable de entorno Shell + todos los programas hijos export MI_VAR="algo"
# Variable normal - solo existe aquí
mi_variable="hola"

# Variable de entorno - disponible para programas hijos
export MI_VARIABLE_ENV="hola"

Ver Variables de Entorno

Ver todas: env o printenv

# Ver todas las variables de entorno
env

# O también
printenv

# Ver con paginación
env | less

Ver una específica

# Imprimir una variable
echo $HOME
echo $PATH
echo $USER

# O usar printenv
printenv HOME
printenv PATH
# ¿Cuántas variables de entorno tienes?
env | wc -l

# Busca variables interesantes
env | grep -i user
env | grep -i home
env | grep -i shell

# Las más importantes
echo "Usuario: $USER"
echo "Home: $HOME"
echo "Shell: $SHELL"
echo "Path: $PATH"

Variables de Entorno Importantes

$PATH - La más importante

Define dónde busca Bash los comandos:

echo $PATH
# /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin

Son directorios separados por :. Cuando escribes ls, Bash busca en cada directorio hasta encontrarlo.

# ¿Dónde está el comando ls?
which ls
# /usr/bin/ls

# Está en uno de los directorios de $PATH

$HOME - Tu directorio personal

echo $HOME
# /home/tu_usuario

# Es equivalente a ~
cd $HOME
cd ~       # Lo mismo

$USER - Tu nombre de usuario

echo $USER
# tu_usuario

echo "Hola, $USER"
# Hola, tu_usuario

$SHELL - Tu shell

echo $SHELL
# /bin/bash  o  /bin/zsh

$PWD - Directorio actual

echo $PWD
# /home/tu_usuario/proyectos

cd /tmp
echo $PWD
# /tmp

$EDITOR - Editor por defecto

echo $EDITOR
# vim  o  nano  o  (vacío)

# Si está vacío, puedes definirlo
export EDITOR=nano

Tabla de Variables Comunes

Variable Descripción
$PATH Directorios donde buscar comandos
$HOME Tu directorio home
$USER Tu nombre de usuario
$SHELL Shell actual
$PWD Directorio de trabajo actual
$OLDPWD Directorio anterior
$EDITOR Editor de texto por defecto
$LANG Idioma/locale del sistema
$TERM Tipo de terminal
$HOSTNAME Nombre de la máquina
# Completa esta información de tu sistema
echo "=== MI SISTEMA ==="
echo "Usuario: $USER"
echo "Hostname: $HOSTNAME"
echo "Home: $HOME"
echo "Shell: $SHELL"
echo "Editor: $EDITOR"
echo "Idioma: $LANG"
echo "Terminal: $TERM"

export - Crear Variables de Entorno

Sin export vs Con export

# Variable normal (solo en este shell)
MI_VAR="hola"

# Ejecuta un subshell
bash -c 'echo $MI_VAR'
# (vacío - el subshell no la ve)

# Ahora con export
export MI_VAR="hola"

# Ejecuta un subshell
bash -c 'echo $MI_VAR'
# hola (ahora sí la ve)

Dos formas de exportar

# Forma 1: export después
MI_VAR="valor"
export MI_VAR

# Forma 2: export directo
export MI_VAR="valor"
# Sin export
SECRETA="sin_export"
bash -c 'echo "Secreta: $SECRETA"'
# ¿Qué imprime?

# Con export
export PUBLICA="con_export"
bash -c 'echo "Publica: $PUBLICA"'
# ¿Qué imprime?

# Python también puede leerlas
export MI_VARIABLE="hola_python"
python3 -c 'import os; print(os.environ.get("MI_VARIABLE"))'

Modificar $PATH

A veces necesitas agregar directorios a $PATH:

Agregar al final

# Ver PATH actual
echo $PATH

# Agregar un directorio al final
export PATH="$PATH:/nuevo/directorio"

# Verificar
echo $PATH

Agregar al inicio (mayor prioridad)

# Agregar al inicio (se busca primero)
export PATH="/nuevo/directorio:$PATH"
# Crea un directorio para scripts
mkdir -p ~/mis_scripts

# Agrega a PATH
export PATH="$PATH:$HOME/mis_scripts"

# Verifica
echo $PATH | tr ':' '\n' | tail -3

# Ahora cualquier script en ~/mis_scripts se puede ejecutar desde cualquier lugar

Archivos de Configuración

Las variables de entorno se pierden al cerrar la terminal. Para hacerlas permanentes, se agregan a archivos de configuración.

¿Qué archivo usar?

Archivo Cuándo se ejecuta
~/.bashrc Cada vez que abres una terminal interactiva (Bash)
~/.bash_profile Al iniciar sesión (login shells)
~/.profile Al iniciar sesión (más general)
~/.zshrc Cada vez que abres terminal (Zsh/macOS)

Regla práctica

  • Linux/WSL2 con Bash: Usa ~/.bashrc
  • macOS con Zsh: Usa ~/.zshrc

Ver contenido

# Ver tu .bashrc
cat ~/.bashrc

# O con less para archivos largos
less ~/.bashrc

Agregar variable permanente

# Agregar al final de .bashrc
echo 'export MI_VARIABLE="valor_permanente"' >> ~/.bashrc

# Recargar para que tome efecto
source ~/.bashrc

# Verificar
echo $MI_VARIABLE
# ¿Tienes un .bashrc?
ls -la ~/.bashrc

# Ver las primeras 20 líneas
head -20 ~/.bashrc

# Buscar exports existentes
grep "export" ~/.bashrc

# Buscar aliases
grep "alias" ~/.bashrc

Variables de Entorno en la Práctica

Para Python

# Configurar dónde Python busca módulos
export PYTHONPATH="/mi/ruta/modulos:$PYTHONPATH"

# Verificar desde Python
python3 -c 'import sys; print(sys.path)'

Para editores

# Definir editor por defecto
export EDITOR=nano
export VISUAL=nano

# Ahora git y otros programas usarán nano

Para proyectos

# Variables para tu proyecto
export PROJECT_HOME="$HOME/proyectos/mi_app"
export DATABASE_URL="localhost:5432"

# Usarlas
cd $PROJECT_HOME
echo "Conectando a $DATABASE_URL"

Ejercicios Integrales

# 1. Crea variables para tu proyecto
export PROYECTO="mi_app"
export PROYECTO_DIR="$HOME/proyectos/$PROYECTO"
export PROYECTO_ENV="desarrollo"

# 2. Verifica
echo "Proyecto: $PROYECTO"
echo "Directorio: $PROYECTO_DIR"
echo "Ambiente: $PROYECTO_ENV"

# 3. Crea el directorio si no existe
mkdir -p $PROYECTO_DIR
ls -la $PROYECTO_DIR
# 1. Crea un directorio para scripts personales
mkdir -p ~/bin

# 2. Crea un script simple
echo '#!/bin/bash
echo "Hola desde mi script!"' > ~/bin/saludo

# 3. Hazlo ejecutable
chmod +x ~/bin/saludo

# 4. Agrega ~/bin a PATH
export PATH="$PATH:$HOME/bin"

# 5. Prueba ejecutar desde cualquier lugar
cd /tmp
saludo
# Debería imprimir: Hola desde mi script!
# 1. Variable sin exportar
LOCAL="soy_local"

# 2. Variable exportada
export GLOBAL="soy_global"

# 3. Crea un script para probar
cat << 'EOF' > /tmp/test_vars.sh
#!/bin/bash
echo "LOCAL: $LOCAL"
echo "GLOBAL: $GLOBAL"
EOF

chmod +x /tmp/test_vars.sh

# 4. Ejecuta y observa
/tmp/test_vars.sh
# ¿Cuál variable ve el script?

Resumen

Concepto Descripción
Variable de entorno Variable disponible para todos los procesos hijos
env / printenv Ver todas las variables de entorno
export VAR=valor Crear/exportar variable de entorno
$PATH Dónde buscar comandos
~/.bashrc Archivo de configuración (Bash)
source ~/.bashrc Recargar configuración

Siguiente: Ahora veremos entrada y salida - stdin, stdout, stderr y cómo manipular el flujo de datos.