Curso de Introducción a Unix - por F.C.

CONFIGURACION DEL ENTORNO

El entorno de trabajo queda definido mediante los valores que la shell encuentra en los ficheros de inicialización que se leen cada vez que entramos en la cuenta o empezamos una nueva shell. En general en los ficheros de configuración suelen definirse variables locales (o de shell) y variables de entorno, definir alias e incluir comandos que queramos que se ejecuten al entrar en la cuenta o la nueva shell.

Nos centraremos en la C shell y TC shell que son las más comunes. Los ficheros de configuración básicos que se leen cuando entramos en la cuenta son el .cshrc (o .tcshrc para la TC shell) y el .login . Cuando se inicia una nueva shell sólo se lee el primero. Estos ficheros deben estar en el home y al empezar por . son ficheros ocultos.

Hay que distinguir entre dos tipos de variables: las variables locales y las de entorno. Las primeras sólo tienen validez en la shell en las que están definidas. Las segundas son heredadas por cualquier shell que se ejecute aunque estas variables hayan sido definidas en el .login que no se lee al abrir una nueva shell.

Los comandos básicos para la definición de variables son, set, setenv, unset, unsetenv.

set

Este comando se utiliza para definir las variables locales, su sintaxis es:

set varname = value
set varname

En el primer caso asignamos un valor a una variable esté o no definida anteriormente, por ejemplo:

set prompt="(%M)%~%% "

define lo que aparece al principio de la línea de comandos. %M es el hostname. %~ El directorio en el que estamos pero representando nuestro home por ~ y %% añade el caracter % al final. Cada shell usa símbolos distintos para definir el prompt,.

En el segundo caso simplemente se define una variable. Por ejemplo:

set noclobber

define la variable noclobber. Si esta variable esta definida no permitirá sobreescribir un fichero si redireccionamos la salida de un comando a un fichero que ya existe.

Para ver el valor de una variable ya vimos que se puede hacer con el comando echo. Por ejemplo:
echo $PATH
Mostrará el contenido de la variable de entorno PATH (esta variable contiene las rutas de accesos donde la shell buscara los ficheros ejecutables. Seguirá el orden en que los directorios aparezcan en el PATH). Sin embargo, si queremos ver todas las variables que tenemos definidas ejecutamos set sin argumentos.

setenv

Se emplea de forma análoga a set pero con variables de entorno. La sintaxis es ligeramente diferente:
setenv varname value
(sin el signo =). Podemos asignar un valor a una variable, simplemente definirla, o ver las variables de entorno que tenemos definidas ejecutando setenv sin argumentos.
setenv TAPE /dev/rmt/0bn
Define la variable TAPE como /dev/rmt/0bn .

unset y unsetenv

Sirven para borrar variables locales y de entorno respectivamente, que ya estaban definidas. La sintaxis es:
unset varname
unsetenv varname

¿Donde definir las variables?

Cada vez que empezamos una nueva shell se ejecuta un fichero de configuración que depende de la shell en cuestion:

    Bourne Shell            .profile
    C Shell                 .cshrc
    TC shell                .tcshrc
    Korn Shell              .kshrc
    BASH                    .bashrc

Es en estos ficheros donde debemos definir las variables locales que se las llama también variables de la shell. Por convención para estas variables se usan letras minúsculas mientras para las variables de entorno se suelen usar mayúsculas. Hay que tener en cuenta que en cada shell hay variables que tienen significados especiales solamente en esa shell, por esto la definición de estas variables debe hacerse en estos ficheros y no en el .login.

En el fichero .login en general suelen definirse las variables de entorno, aunque pueden definirse en el fichero de inicialización de la shell correspondiente.

Una vez dentro de una shell (supongamos TC shell) podemos definir nuevas variables ejecutando los comandos set o setenv. o bien incluyendo estos comandos en el fichero .tcshrc y volviendolo a ejecutar con el comando source.
source .tcshrc

Alias

Otra de las utilidades que permiten tener un entorno de trabajo más agradable es la definición de alias. Un alias nos permite asignar un nuevo nombre a un comando. Esto puede ser muy útil en comandos que usemos frecuentemente y que tengan nombres largos, difíciles de recordar o con complicadas opciones.

Hay algunas diferencias de sintaxis dependiendo de la shell que empleemos (supondremos que usamos una TC shell). Para definir los alias se usa el comando:

alias nombre definicion

Nombre es el nuevo nombre del comando (procurar que sea corto y fácil de recordar). Definición son los comandos que queremos que se ejecuten cuando tecleamos el alias (es conveniente ponerlo entre ' ') por ejemplo:
alias lf 'ls -F'
alias. 'echo $cwd; ls'

Si lo ejecutamos en la línea de comandos sólo tendrá validez en esa shell. Si queremos definirlo de forma que quede permanentemente asignado lo debemos incluir en el fichero .tcshrc o cualquier otro fichero que el .tcshrc ejecute. En la definición de los alias podemos no sólo hacer referencia a comandos sino también a otros alias.

En el primer ejemplo definimos el comando lf que será equivalente al comando ls con la opción -F (esta opción añade una / despues del nombre del fichero si es un directorio, un * si es un ejecutable, un @ si es un link).

En el segundo ejemplo al teclear . nos mostrará el valor de la variable cwd que contiene el directorio en que estamos y hace luego un listado de este directorio.

Pueden ponerse varios comandos en un mismo alias separandolos por ; asi como también está permitido la utilización de pipes.

También se pueden pasar argumentos al alias desde la línea de comandos. Cuando ejecutamos un alias podemos poner una serie de argumentos que se interpretan como si estuvieran inmediatamente después de la definición del alias. Por ejemplo:

alias k9 'kill -9'
k9 17313
Al ejecutar esta última línea se matará el proceso 17313.

Si queremos que los argumentos que damos al alias se sitúen en un punto distinto del final, tenemos los siguientes cracteres:
!^
!*
que deben estar precedidos de \ para evitar que el caracter ! sea interpretado por la shell de otra manera. El primero pasa el argumento que aparece en primer lugar de la línea de comandos al punto donde aparece !^. El segundo pasa todos los argumentos. Por ejemplo:

alias gv 'ghostview -a4 -swap -bg white \!^ &'

Tecleando gv file.ps podremos ver el fichero postscript file.ps con el programa ghostview. El argumento que damos (que es el nombre del postscript) será introducido antes del caracter & que manda el proceso al background.

Para ver todos los alias que hay definidos se ejecuta el comando alias sin argumento. Para ver la definición de un alias concreto tecleamos alias name.

Para cancelar a definición de un alias se usa el comando unalias name. Si queremos cancelar la definición definitivamente, tendremos que borrarlo del fichero .tcshrc.

Para evitar confusiones no se debe usar el nombre de un comando como alias para otro o el mismo comando con diferentes opciones. Por ejemplo muchos usuarios suelen definir:

alias rm 'rm -i'

Al ejecutar rm * se ejecuta en realidad el comando rm -i * que nos va pidiendo confirmación de si queremos borrar realmente los ficheros. El problema puede presentarse si nos abren una cuenta en otro sistema donde no hayamos definido este alias y al ejecutar rm * nos borrara todos los ficheros sin pedir confirmación. Para evitar esto es mejor definir el alias con otro nombre como del o rmi.