3.9. Shells

En FreeBSD gran parte del trabajo diario se hace en una interfaz de línea de órdenes llamada shell. El trabajo principal de la shell es ir recibiendo órdenes mediante un canal de entrada y ejecutarlos. Muchas shells también tienen funciones integradas para ayudar con las tareas diarias como manipulación de ficheros, gestión de archivos con expresiones regulares, edición en la propia línea de órdenes, macros de órdenes y variables de entorno. FreeBSD incluye diversas shells, como sh, el shell Bourne y tcsh, el shell C mejorado. Hay muchas otras shells disponibles en la colección de ports de FreeBSD, como zsh y bash.

¿Qué shell usar? es realmente una cuestión de gustos. Si va a programar en C puede preferir usar una shell tipo C, como tcsh. Si viene del mundo Linux o si es nuevo en la interfaz de línea de órdenes de UNIX® puede probar con bash. Tenga en cuenta que cada shell posee unas propiedades únicas que pueden o no funcionar con su entorno de trabajo preferido, y que puede usted elegir qué shell usar.

Una de las propiedades comunes de las shell es que completan los nombres de fichero. Una vez que ha introducido las primeras letras de una orden o del nombre de un fichero, se puede hacer que la shell complete automáticamente el resto de la orden o nombre de fichero pulsando la tecla Tab. Veamos un ejemplo. Suponga que tiene dos ficheros llamados talcual y tal.cual. Usted quiere borrar tal.cual. Lo que habría que teclear es: rm ta[Tab].[Tab].

La shell mostraría en pantalla rm fo[BIP].cual.

El [BIP] es la campana de la consola, es decir, la shell está diciéndome que no pudo completar totalmente el nombre de fichero porque hay más de una coincidencia. Tanto talcual como tal.cual comienzan por ta, pero solo se pudo completar hasta tal. Si se teclea ., y de nuevo Tab, entonces la shell es capaz de añadir el resto del nombre de fichero.

Otra función de la shell son las variables de entorno. Las variables de entorno son parejas de valores clave almacenados en el espacio de entorno del shell. Este espacio puede ser leído por cualquier programa invocado por la shell y, por lo tanto, contiene mucha configuración de programas. Esta es una lista de las variables de entorno más comunes y su significado:

Variable Descripción
USER Nombre de usuario en el sistema.
PATH Lista de directorios, separados por punto y coma, en los que se buscan ejecutables.
DISPLAY Nombre de red de la pantalla X11 a la que conectarse, si está disponible.
SHELL La shell actual.
TERM El nombre de la terminal del usuario. Se usa para determinar las características de la terminal.
TERMCAP Base de datos donde encontrar los códigos de escape necesarios para realizar diferentes funciones en la terminal.
OSTYPE Tipo de sistema operativo. Por ejemplo, FreeBSD.
MACHTYPE Arquitectura de CPU en la que se está ejecutando el sistema.
EDITOR El editor de texto preferido por el usuario.
PAGER El paginador de texto preferido por el usuario.
MANPATH Lista de directorios separados por punto y coma en los que se buscan páginas de manual.

Establecer una variable de entorno difiere ligeramente de shell a shell. Por ejemplo, en las shells al estilo C como tcsh y csh, se usaría setenv para establecer las variables de entorno. Bajo shells Bourne como sh y bash, se usaría export para establecer las variables de entorno actuales. Por ejemplo, para establecer o modificar la variable de entorno EDITOR (bajo csh o tcsh) la siguiente orden establece EDITOR como /usr/local/bin/emacs:

% setenv EDITOR /usr/local/bin/emacs

Bajo shells Bourne:

% export EDITOR="/usr/local/bin/emacs"

También se puede hacer que la mayoría de las shells muestren el contenido de una variable de entorno situando el carácter $ delante del nombre de la variable en la línea de órdenes. Por ejemplo, echo $TERM mostrará cualquiera que sea el valor que haya establecido para $TERM, porque la shell expande el valor de $TERM y se lo pasa al programa echo.

Las shells manejan muchos caracteres especiales, llamados metacaracteres, como representaciones especiales de datos. El más común es el caracter *, que representa cualquier número de caracteres en un nombre de fichero. Estos metacaracteres especiales se pueden usar para la expansión de nombres de fichero. Por ejemplo, teclear echo * es casi lo mismo que introducir ls porque el shell toma todos los ficheros que coinciden con * y se los pone en la línea de órdenes para que echo los vea.

Para evitar que la shell interprete estos caracteres especiales se pueden escapar de la shell anteponiéndoles una contrabarra (\). echo $TERM imprime el nombre de terminal que esté usando. echo \$TERM imprime $TERM, literalmente.

3.9.1. Cómo cambiar su shell

La manera más fácil de cambiar de shell es mediante chsh. chsh le colocará dentro del editor que esté configurado en la variable de entorno EDITOR; si no la ha modificado, el sistema ejecutará vi, el editor por defecto. Cambie la línea “Shell:” según prefiera.

También se le puede suministrar a chsh la opción -s; ésto establecerá la shell sin necesidad de entrar en el editor de texto. Si por ejemplo quiere que bash sea su shell por defecto puede configurarlo del siguiente modo:

% chsh -s /usr/local/bin/bash

Ejecutar chsh sin parámetros y editar la shell desde ahí también funciona.

Nota: La shell que se desee usar debe estar incluida en /etc/shells. Si se ha instalado una shell desde la colección de ports esto deberí estar hecho automáticamente. Si ha instalado la shell manualmente, tendrá usted que realizar dicha modificación de /etc/shells.

Por ejemplo, si instaló manualmente bash y lo ubicó en /usr/local/bin, debería hacer lo siguiente:

# echo "/usr/local/bin/bash" >> /etc/shells

Y volver a ejecutar chsh.

Éste y otros documentos pueden obtenerse en ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para preguntas acerca de FreeBSD, leer la documentación antes de contactar con la lista <questions@FreeBSD.org>.
Para preguntas acerca de esta documentación, e-mail a <doc@FreeBSD.org>.