Cada proceso tiene un entorno: una colección de cadenas de nombre y valor heredadas de su proceso padre. Las shells utilizan variables de entorno para transmitir a los programas que inician configuraciones como el idioma o las rutas de búsqueda de ejecutables.
Text-Fu · Lección 5
env (Entorno)
Aprende cómo expande, exporta, inspecciona y sustituye temporalmente Bash las variables de entorno.
Expansión de valores de variables en Bash
Bash expande $NAME o ${NAME} al valor de una variable antes de ejecutar una orden. Entrecomilla la expansión para conservar el valor como un único argumento:
$ printf '%s\n' "$HOME"
/home/pete
Algunas variables de entorno habituales son:
HOME: Ruta del directorio personal del usuario actual.USER: Nombre de usuario proporcionado por el entorno de inicio de sesión en muchos sistemas.PWD: Directorio de trabajo actual de la shell.PATH: Directorios en los que se buscan nombres de órdenes.
Los valores dependen del entorno del proceso actual; no son constantes universales. Una variable no definida se expande a una cadena vacía, salvo que se active un comportamiento más estricto de la shell.
¿Qué orden de Bash muestra el valor de HOME y lo conserva como un único argumento?
Inspección del entorno actual
Ejecuta env sin operandos para mostrar el entorno heredado por ese proceso env:
$ env
La salida contiene registros NAME=value, por ejemplo:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/bin
PWD=/home/user
USER=pete
Las variables de entorno pueden contener credenciales, tokens, rutas internas u otros datos sensibles. No pegues toda la salida de env en incidencias o registros públicos sin revisarla y ocultar los datos necesarios.
¿Qué orden muestra el entorno visible para un proceso recién iniciado?
Búsqueda de órdenes mediante PATH
PATH es una lista de directorios separados por dos puntos que Bash recorre cuando el nombre de una orden no contiene ninguna barra:
$ printf '%s\n' "$PATH"
El orden importa: Bash utiliza la primera orden adecuada que encuentra según sus reglas de resolución. Utiliza type -a NAME para inspeccionar cómo resuelve la shell actual un nombre.
Para añadir /opt/coolapp/bin a la shell actual y a sus futuros procesos hijo sin perder la ruta existente:
$ export PATH="/opt/coolapp/bin:$PATH"
No sustituyas accidentalmente PATH por un único directorio nuevo ni añadas directorios no fiables con permisos de escritura. Cualquiera de esos errores puede impedir encontrar órdenes normales o hacer que se ejecute un programa inesperado.
¿Qué orden añade /opt/coolapp/bin antes del PATH existente para el proceso actual de Bash y sus futuros hijos?
Exportación de una variable a procesos hijo
Las variables de Bash no forman parte automáticamente del entorno entregado a los procesos hijo. Marca un nombre para exportarlo con export:
$ export TEST=test
El proceso actual de Bash tiene ahora una variable llamada TEST, y las órdenes que inicie heredarán TEST=test. Un proceso hijo no puede utilizar este mecanismo para modificar el entorno de su padre.
$ printenv TEST
test
La asignación suele durar hasta que elimines la variable o termine la shell. No modifica el entorno de todo el sistema.
¿Cuál es el efecto principal de export TEST=test en Bash?
Asignación de un valor para una sola orden
Coloca asignaciones antes de una orden para proporcionar valores únicamente a su entorno:
$ LANG=C sort names.txt
El valor de LANG de la shell actual no cambia de forma permanente. La utilidad env ofrece otra forma explícita:
$ env LANG=C sort names.txt
Utiliza env -i COMMAND para iniciar una orden con un entorno inicialmente vacío y añade después las asignaciones necesarias. Muchos programas dependen de valores del entorno, así que usa esta opción deliberadamente.
¿Qué orden ejecuta sort names.txt con LANG=C sin cambiar de forma permanente el valor de LANG de la shell actual?
Carga de valores personales en futuras sesiones
Para volver a crear una variable exportada en futuras sesiones interactivas de Bash, coloca una línea export adecuada en el archivo de inicio que esas sesiones lean; para sesiones interactivas de Bash que no son de inicio, suele ser ~/.bashrc:
export TEST=test
Zsh suele utilizar ~/.zshrc, mientras que Fish emplea otra sintaxis y configuración. Las shells de inicio de sesión y las no interactivas pueden leer archivos diferentes, así que identifica la shell y el tipo de sesión en vez de suponer que un único archivo configura todos los procesos.
Para practicar la herencia del entorno y la configuración de la shell, prueba estos laboratorios:
- Administrar el entorno y la configuración de la shell en Linux - Practica la creación y gestión de variables locales y de entorno, su herencia y su persistencia mediante
.bashrc. - Variables de entorno en Linux - Aprende a crear, modificar y gestionar variables de entorno y comprende su papel en la configuración del sistema.
Lección completada
Has completado env (Entorno)
Ahora puedes inspeccionar y controlar el entorno que Bash transmite a los procesos hijo.
Expandir valores de variables con comillas deliberadas.
Revisar valores exportados sin exponer secretos.
Conservar y ordenar los directorios de órdenes en
PATH.Exportar una variable de la shell a futuros procesos hijo.
Sustituir un valor para una sola orden sin cambiar la shell padre.
Guarda tu progreso
Crea una cuenta gratuita para guardar esta lección y continuar en cualquier dispositivo.
Crear una cuenta gratuita