ant

PERSONALIZACIÓN DEL ENTORNO
3.13

sig

3.13 Personalizando su Entorno

El interprete de comandos proporciona muchos mecanismos para personalizar su entorno de trabajo. Como hemos mencionado antes, el interprete de comandos es más que un mero interprete, es también un poderoso lenguaje de programación.
Diferentes interpretes usan diferentes sintaxis para la ejecución de guiones. Por ejemplo, Tcsh usa una notación al estilo C, mientras que Bourne usa otro tipo de sintaxis. En esta sección no nos fijaremos en las diferencias entre los dos y supondremos que los guiones son escritos con la sintaxis del interprete de comandos Bourne.

3.13.1 Guiones del interprete de comandos

Supongamos que usa una serie de comandos a menudo, y le gustaría acortar el tiempo requerido para teclear agrupándolos en una única "orden". Por ejemplo, las ordenes
/home/Decker# cat Capitulo1 Capitulo2 Capitulo3 > Libro
/home/Decker# wc -l Libro
/home/Decker# lp Libro
concatenarán los ficheros Capitulo1, Capitulo2 y Capitulo1 y guardará el resultado en el fichero Libro. Entonces, se mostrará el recuento del número de líneas del fichero Libro y finalmente se imprimirá con el comando lp.

En lugar de teclear todos esos comandos, podría agruparlos en un guión del interprete de comandos. Describimos los guiones brevemente en la Sección 3.13.1. El guión usado para ejecutar todas las ordenes sería
#!/bin/bash
# Un script de la shell de comandos Bash para crear e imprimir 'Libro'

cat Capitulo1 Capitulo2 Capitulo3 > Libro
wc -l Libro
lp Libro
Si el guión se salva en el fichero makebook, podría simplemente usar la orden
/home/Decker# makebook
para ejecutar todas las ordenes del guión.

Los guiones son simples ficheros de texto; puede crearlos con un editor como Emacs o vi. Veamos este guión. La primera linea "#!/bin/bash", identifica el fichero como un guión y le dice al interprete de comandos como ejecutarlo. Instruye al interprete a pasarle el guión a /bin/bash para la ejecución, donde /bin/bash es el programa del interprete. >Por que es esto importante? En la mayoría de los sistemas UNIX /bin/bassh es un interprete de comandos Bourne, como sh. Forzando al guión a ejecutarse usando /bin/bash nos estamos asegurando de que será interpretado según la sintaxis de Bourne. Esto hará que el guión se ejecute usando la sintaxis Bourne aunque este usando Tcsh como interprete de comandos.

La segunda línea es un comentario. Estos comienzan con el carácter "#" y continúan hasta el final de la linea. Los comentarios son ignorados por el interprete de comandos y son habitualmente usados para identificar el guión con el programador.

El resto de las líneas del guión son simplemente ordenes como las que podría teclear directamente. En efecto, el interprete de comandos lee cada linea del guión y ejecuta la linea como si hubiese sido tecleada en la linea de comandos.

Los permisos son importantes para los guiones. Si crea un guión, debe asegurarse de que tiene permisos de ejecución para poder ejecutarlo. La orden
/home/Decker# chmod u+x makebook
puede ser usada para dar permisos de ejecución al guión makebook.

3.13.2 Variables del interprete de comandos y el entorno

El interprete de comandos le permite definir variables como la mayoría de los lenguajes de programación. Una variable es simplemente un trozo de datos al que se le da un nombre.
****Nótese que Tcsh, así como otros interpretes del estilo C, usan un mecanismo diferente para inicializar variables del descrito aqui. Esta discusión supondrá el uso del interprete Bourne, como es Bash (el cual probablemente esta usando). Vea la página de manual de Tcsh para mas detalles.

Cuando asigna un valor a una variable (usando el operador "="), puede acceder a la variable añadiendo a su nombre "$", como se ve a continuación.
/home/Decker# mensaje="Sea usted Bienvenido a Deckerix"
A la variable mensaje se le da el valor "Sea usted Bienvenido a Deckerix". Podemos ahora hacer referencia a ese valor a traves del nombre de la variable con el prefijo "$". La orden
/home/Decker# echo $mensaje
Sea usted Bienvenido a Deckerix
/home/Decker#
produce el mismo resultado que
/home/Decker# echo "Sea usted Bienvenido a Deckerix" Sea usted Bienvenido a Deckerix /home/Decker#
Estas variables son internas al interprete. Esto significa que solo este podrá acceder a las variables. Esto puede ser útil en los guiones; si necesita mantener, por ejemplo, el nombre de un fichero, puede almacenarlo en una variable. Usando la orden set mostrará una lista de todas las variables definidas en el interprete de comandos.

De cualquier modo, el interprete de comandos permite exportar variables al entorno. El entorno es el conjunto de variables a las cuales tienen acceso todas las ordenes que ejecute. Una vez que se define una variable en el interprete, exportarla hace que se convierta también en parte del entorno. La orden export es usada para exportar variables al entorno.

****De nuevo, hemos de diferenciar entre Bash y Tcsh. Si esta usando Tcsh, deberá usar una sintaxis diferente para las variables de entorno (se usa la orden setenv). Diríjase a la pagina de manual de Tcsh para mas información.

El entorno es muy importante en un sistema UNIX. Le permite configurar ciertas ordenes simplemente inicializando variables con las ordenes ya conocidas.

Veamos un ejemplo rápido. La variable de entorno PAGER es usada por la orden man. Especifica la orden que se usará para mostrar las paginas del manual una a una. Si inicializa PAGER con el nombre del programa, se usará este para mostrar las paginas de manual en lugar de more (el cual es usado por defecto).

Inicialize PAGER a "cat". Esto hará que la salida de man sea mostrada de una, sin pausas entre páginas.
/home/Decker# PAGER="cat"
Ahora exportamos PAGER al entorno.
/home/Decker# export PAGER
Pruebe la orden man ls. La página debería volar por su pantalla sin detenerse entre páginas. Ahora, si inicializa PAGER a "more", se usará la orden more para mostrar las paginas del manual.
/home/Decker# PAGER="more"
Nótese que no hemos de usar la orden export después del cambio de la variable PAGER. Solo hemos de exportar las variables una vez; cualquier cambio efectuado con posterioridad será automáticamente propagado al entorno.

Las páginas de manual para una orden en particular, le informarán acerca del uso de alguna variable de entorno por parte de esa orden; por ejemplo, la página de manual de man explica que PAGER es usado para especificar la orden de paginado.

Algunas ordenes comparten variables de entorno; por ejemplo, muchas ordenes usan la variable EDITOR para especificar el editor por defecto para usar si es necesario.

El entorno es también usado para guardar información importante acerca de la sesión en curso. Un ejemplo es la variable de entorno HOME, que contiene el nombre del directorio de origen del usuario.
/home/Decker/documentos# echo $HOME
/home/Decker
Otra variable de entorno interesante es PS1, la cual define el "prompt" principal que usará el interprete. Por ejemplo,
/home/Decker# PS1="Your command, please: "
Su comando, por favor:
Para volver a inicializar el "prompt" a su valor habitual (el cual contiene el directorio actual seguido por el símbolo "#"),
Su comando, por favor: PS1="\W# "
/home/Decker#
La página de manual de bash describe la sintaxis usada para inicializar el "prompt".

3.13.3 La variable de entorno PATH

Cuando usa la orden ls ¿cómo encuentra el interprete el programa ejecutable ls?. De hecho, ls se encuentra en /bin/ls en la mayoría de los sistemas. El interprete usa la variable de entorno PATH para localizar los ficheros ejecutables u ordenes que tecleamos.

Por ejemplo, su variable PATH puede inicializarse a:
/bin:/usr/bin:/usr/local/bin:.
Esto es una lista de directorios en los que el interprete debe buscar. Cada directorio esta separado por un ":". Cuando usa la orden ls, el interprete primero busca /bin/ls, luego /usr/bin/ls y así hasta que lo localice o acabe la lista.

Nótese que PATH no interviene en la localización de ficheros regulares. Por ejemplo, si usa la orden
/home/Decker# cp este.txt aqui.txt
El interprete no usará PATH para localizar los ficheros este.txt y aqui.txt esos nombres se suponen completos.
Solo se usará PATH para localizar el programa ejecutable cp.

Esto le permitirá ahorrar mucho tiempo; significa que no deberá recordar donde son guardadas las ordenes. En muchos sistemas los ficheros ejecutables se dispersan por muchos sitios, como /usr/bin, /bin o /usr/local/bin. En lugar de dar el nombre completo con el camino (como /usr/bin/cp), solo hemos de inicializar PATH con la lista de los directorios donde queremos que se busquen automáticamente.

Nótese que PATH contiene ".", el cual es el directorio actual de trabajo. Esto le permite crear guiones o programas y ejecutarlos desde su directorio de trabajo actual sin tener que especificarlo directamente (como en ./makebook). Si un directorio no está en su PATH, entonces el interprete no buscará en él ordenes para ejecutar, esto incluye al directorio de trabajo.

3.13.4 Guiones de inicialización del interprete

A parte de los guiones que puede crear, hay un número de estos que usa el interprete de comandos para ciertos propósitos. Los más importantes son sus guiones de inicialización, guiones automáticamente ejecutados por el interprete al abrir una sesión.

Los guiones de inicialización son eso, simples guiones como los descritos arriba. De cualquier modo, son muy útiles para la inicialización de su entorno al ejecutarse automáticamente. Por ejemplo, si siempre usa la orden Mail para comprobar si tiene correo al iniciar una sesión, incluya en su guión de inicialización dicha orden y será ejecutada automáticamente.

Tanto Bash como Tcsh distinguen entre un interprete de presentación y otras invocaciones del interprete. Un interprete de presentación es el que se ejecuta en el momento de la presentación al sistema (login). Es el único que usará. De cualquier modo, si ejecuta una opcion de salir a un interprete desde algún programa, como vi, inicializa otra instancia del interprete de comandos, el cual no es su interprete de presentación. Además, en cualquier momento que ejecuta un guión, automáticamente está arrancando otro interprete que va a ser el encargado de ejecutar el guión.
Los ficheros de inicialización usados por Bash son: /etc/profile (configurado por el administrador del sistema, y ejecutado por todos los usuarios de Bash en el momento de la presentación al sistema), $HOME/.bash_profile (ejecutado por una sesión de presentación Bash) y $HOME/.bashrc (ejecutadas por todas las sesiones Bash que no son de presentación). Si .bash_profile no está presente, se usa en su lugar .profile .

Tcsh usa los siguientes guiones de inicialización: /etc/csh.login (ejecutado por todos los usuarios de Tcsh en el momento de la presentación al sistema), $HOME/.tcshrc (ejecutado en la presentación al sistema por todas las instancias nuevas de Tcsh) y $HOME/.login (ejecutado en la presentación al sistema, seguido .tcshrc). Si .tcshrc no esta presente, .cshrc se usa en su lugar.