VARIABLES DE ENTORNO

 

Las variables de entorno son un conjunto de valores dinámicos en memoria en los que se puede almacenar información importante. Estas variables generalmente son diferentes para cada usuario, y permiten personalizar el entorno UNIX a gusto del usuario.

Por lo general, en UNIX las variables de entorno se escriben en mayúsculas (no hay nada que impida que vayan en minúsculas, salvo evitar confusiones con comandos). Las referencias a variables de entorno se realizan anteponiendo el signo "$" al nombre de la variable ($HOME, $PS1, etc.).

Los nombres de las variables de entorno solo pueden contener letras, números y el guión bajo, no puediendo empezar por número. No pueden contener el carácter "$" ni espacios, salvo en el valor, siempre y cuando este se presente entrecomillado, y diferencian entre mayúsculas y minúsculas. Para evitar problemas se recomienda encerrar entre llaves las variables cuando se haga referencia a ellas, es decir, expresarlas como ${VARIABLE} en lugar de $VARIABLE.

En UNIX existen unas variables de entorno básicas, que son necesarias para que el usuario pueda trabajar adecuadamente. Además, tanto el propio usuario como algunos programas que este ejecute, pueden generar nuevas variables de entorno. Podemos así distinguir entre variables de entorno generales y variables de entorno particulares.

Las variables de entorno generales difieren poco, en cuanto a nombre se refiere, entre los distintos sistemas UNIX, y expresan lo mismo en cada sistema.

Las variables de entorno se pueden definir en los archivos de inicialización, al arrancar un programa, o desde la shell de usuario, y en cualquiera de los casos se definen de la siguiente forma:

NOMBRE=valor

Y si se desea exportar esta variable, para que sea visible fuera del programa o en subshells, habrá que hacer:

export NOMBRE
o
export NOMBRE=valor

Para visualizar el valor de una variable de entorno, basta con teclear:

echo $NOMBRE
echo ${NOMBRE}

En caso de existir, por ejemplo, dos variables NOMBRE y NOMBRE_VIEJO podríamos tener problemas si no usamos las llaves "{}". Veamos un ejemplo:

$ NOMBRE="Nombre"
$ NOMBRE_NUEVO="Otra cosa"
$ echo $NOMBRE $NOMBRE_NUEVO
Nombre Nombre_NUEVO
$ echo ${NOMBRE} ${NOMBRE_NUEVO}
Nombre Otra cosa

Para evitar posibles problemas es recomendable el uso de las llaves "{}" para encerrar los nombres de las variables. Esto se hace más importante aun en el caso de utilizar scripts con más de 9 argumentos (ver Variables Especiales).

Para visualizar las todas variables de entorno en cualquier momento se puede utilizar el comando set. Para borrar una variable de entorno (desdefinirla) usaremos el comando unset NOMBRE.

Las variables creadas en una shell no son conocidas fuera de ella salvo que sean exportadas. Las subshells de una shell no heredan automáticamente las variables de la shell padre. Solo aquellas que hayan sido exportadas serán heredadas y estarán referenciadas como variables de entorno. El cambio de una variable para una subshell no afecta a dicha variable de la shell padre, es decir, no se pueden cambiar variables de una shell padre desde una subshell.

$ HORA=$(date +%H:%M)
$ echo ${HORA}
20:04
$ ksh
   $ echo ${HORA}

   $ exit
$ export HORA
$ ksh
   $ echo ${HORA}
   20:04
   $ HORA=$(date +%H)
   $ echo ${HORA}
   20
   $ exit
$ echo ${HORA}
20:04

La indentación se ha añadido para clarificar el nivel de la shell donde nos encontramos.

Entre las variables de entono más habituales encontramos:

En todas las variables relativas a paths, como pueden ser PATH, MANPATH, FPATH, etc., como se suelen expresar varios directorios (separados por ":") donde se buscarán programas, ayuda, funciones, etc. es conveniente que contengan los directorios estrictamente necesarios y ordenados según mayor probabilidad de utilización con el fin de reducir en la medida de lo posible los tiempos empleados en búsquedas, que aunque es mínimo puede ayudar a que el sistema responda más rápidamente.