VARIABLES DE ENTORNO
Las variables de entorno, como su nombre indica son variables, pueden ser 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.
Entre las variables generales más habituales encontramos:
- EDITOR : Variable que almacena el editor que usará el usuario por defecto.
- ENV : Variable que almacena el archivo en donde el usuario ha definido sus aliases y funciones.
- ERRNO: Variable que almacena el valor del último error producido.
- FPATH : Variable en la que se encuentran almacenados los paths de aquellos directorios en los que el usuario tiene
ubicadas funciones que son accesibles desde cualquier script, o desde la shell. En cada archivo, que tiene que ser ejecutable, se
definirá una función cuyo cuyo nombre tiene que coincidir con el nombre del archivo. En estos directorios solo
deben incluir archivos de funciones. Al igual que en la variable PATH, los diferentes directorios incluidos en la variable irán separados por dos puntos ":"
- HISTFILE : Variable que almacena el nombre del archivo histórico en donde se almacenarán los comandos introducidos por el usuario.
- HISTSIZE : Variable que almacena el número de comandos a almacenar en el archivo histórico.
- HOME : Variable que almacena el directorio del usuario, desde el que arrancará la shell cuando entra en el sistema.
- HOSTNAME : Variable que almacena el nombre de la máquina.
- IFS: Cadena de caracteres que se usará como separador de campos interno, por defecto incluye un espacio, un tabulador y un avance de línea. No conviene cambiarla, aunque puede ser útil hacerlo temporalmente en shell scripts para optimizar tareas.
- LOGNAME : Variable que almacena el nombre o login del usuario.
- MAIL : Variable que almacena el archivo que contiene el correo de usuario.
- MAILCHECK : Variable que indica cada cuantos segundos debe comprobarse si el usuario tiene correo.
- MANPATH : Variable en la que se encuentran almacenados los paths de aquellos directorios en que se encuentran los archivos "man" de ayuda, separados por dos puntos ":".
- PATH : Variable en la que se encuentran almacenados los paths de aquellos directorios a los que el usuario tiene acceso directo, pudiendo ejecutar comandos o programas ubicados en ellos sin necesidad de acceder a dicho directorio. Los diferentes directorios incluidos en la variable irán separados por dos puntos ":".
- PPID : Variable que almacena el PID (identidad de proceso) del proceso padre. El PID del proceso actual se almacena en la variable $$.
- PS1 : Variable que almacena el prompt que se empleará por defecto en la shell.
- PS2, PS3, etc. : Variable que almacena el prompt que se empleará en la 2ª, 3ª, etc. Subshells, lo cual se hace invocando a la shell,es decir, ejecutando por ejemplo, ksh.
- PWD : Variable que almacena el directorio actual, puede ser útil para modificar el prompt (PS1) dinámicamente.
- SECONDS : Variable que almacena el tiempo transcurrido en segundos desde que arrancó la shell actual. Es útil para evitar demasiadas llamadas al comando date durante la ejecución de scripts.
- SHELL : Variable que almacena el interprete de comandos que usa el usuario.
- TERM : Variable que almacena el tipo de terminal desde el que se está trabajando.
- TMOUT : Variable que almacena el tiempo de inactividad que se permite al usuario antes de que el sistema le cierre la sesión.