Introducción a las Variables de Entorno
Ahora que entendemos las variables básicas, exploremos las variables de entorno. Las variables de entorno son variables que están disponibles para cualquier proceso hijo de la shell. Esto significa que pueden ser accedidas por scripts y programas ejecutados desde esa shell.
-
Para ver todas las variables de entorno actuales, usa el comando env:
env
Esto mostrará una lista larga de variables. No te preocupes si no las entiendes todas todavía; cubriremos algunas de las más importantes más adelante.
-
Una de las variables de entorno más importantes es PATH. Echémosle un vistazo:
echo $PATH
La variable PATH enumera los directorios donde el sistema busca programas ejecutables. Cada directorio está separado por dos puntos (:).
-
Ahora, vamos a crear nuestra propia variable de entorno. Usamos el comando export para crear una variable de entorno:
export MY_ENV_VAR="This is an environment variable"
El comando export hace que la variable esté disponible para los procesos hijos. Esta es la diferencia clave entre las variables de shell y las variables de entorno.
-
Para ilustrar la diferencia, vamos a crear un script de shell que intente acceder tanto a una variable de shell normal como a una variable de entorno. Podemos hacer esto usando un heredoc con el comando cat, que es una forma común de escribir contenido multilínea en un archivo:
cat << 'EOF' > test_vars.sh
#!/bin/bash
echo "Shell variable: $my_var"
echo "Environment variable: $MY_ENV_VAR"
EOF
Dale permisos de ejecución al script:
chmod +x test_vars.sh
Ahora ejecuta el script:
./test_vars.sh
Verás que la variable de entorno (MY_ENV_VAR) es accesible, mientras que la variable de shell (my_var) no lo es. Esto se debe a que my_var no fue exportada, por lo que los procesos hijos (como el script) no la conocen.
-
Para verificar que MY_ENV_VAR es ahora una variable de entorno, podemos usar el comando env nuevamente, pero esta vez filtraremos la salida usando grep:
env | grep MY_ENV_VAR
Deberías ver tu nueva variable en la salida.
-
También puedes consultar el valor de tu nueva variable de entorno directamente:
echo $MY_ENV_VAR
¡Excelente! Has creado tu primera variable de entorno y has visto en qué se diferencia de una variable de shell. La diferencia fundamental es que las variables de entorno, creadas con export, están disponibles para los procesos hijos, mientras que las variables de shell no lo están.
Las variables de entorno y las variables de shell tienen cada una su propio alcance. Cuando exportas una variable (por ejemplo, export MY_ENV_VAR="algo"), esta se vuelve disponible para cualquier subproceso iniciado desde esa shell (por ejemplo, un script de shell ejecutado por esa misma shell). Sin embargo, si abres una sesión de shell completamente separada, esta no heredará las variables de tu shell actual a menos que las definas específicamente en un archivo de inicio (como .zshrc o .bashrc).
En otras palabras:
- Una variable de shell normal es visible solo dentro de la sesión actual.
- Una variable exportada está disponible para los procesos hijos lanzados desde esa sesión.
- Una variable configurada en un archivo de inicio de la shell (como
.zshrc) se aplica a todas las nuevas sesiones de esa shell.
No puedes leer directamente las variables de otro usuario o de otra shell porque cada proceso mantiene su propio entorno. Si inicias una nueva shell, esta obtiene una copia de las variables exportadas del padre, pero no de las variables configuradas solo en la shell original sin export.
Aprenderemos cómo configurar variables de entorno de forma permanente en los siguientes pasos.
Niveles de Permanencia de las Variables
Para ayudar a visualizar las diferencias entre estos tipos de variables y sus niveles de permanencia, aquí tienes una visión general:
graph LR
A["Tipos de Variables en Linux"] --> B["Variable de Shell"]
A --> C["Variable de Entorno"]
A --> D["Variable Permanente"]
B --> B1["Solo Sesión"]
B --> B2["No Heredada"]
B --> B3["Se pierde al salir"]
C --> C1["Alcance de Sesión"]
C --> C2["Acceso para Hijos"]
C --> C3["Se pierde al salir"]
D --> D1["Todas las Sesiones"]
D --> D2["Acceso para Hijos"]
D --> D3["Persistente"]
B1 --> E1["my_var='valor'"]
C2 --> E2["export VAR='valor'"]
D3 --> E3["archivo ~/.zshrc"]
style B fill:#ffebee
style C fill:#fff3e0
style D fill:#e8f5e8
Este diagrama muestra los tres niveles de permanencia de las variables. Aquí tienes una tabla de resumen para referencia rápida:
| Tipo de Variable |
Alcance |
Acceso Proceso Hijo |
Persistencia |
Ejemplo de Sintaxis |
| Variable de Shell |
Solo sesión actual |
No |
Se pierde al salir |
my_var='valor' |
| Variable de Entorno |
Sesión actual |
Sí |
Se pierde al salir |
export VAR='valor' |
| Variable Permanente |
Todas las sesiones |
Sí |
Sobrevive al salir |
En archivo ~/.zshrc |
Comprender estos tres niveles es crucial para una administración eficaz del sistema Linux y te ayudará a elegir el enfoque adecuado para diferentes escenarios.