¿Qué es Bourne Shell?

El shell Bourne es un pequeño programa que se ejecuta en los sistemas operativos Unix® y LINUX® y proporciona una interfaz para ejecutar programas en el sistema. A menudo se denomina interfaz de línea de comandos o intérprete de comandos, ya que no proporciona una interfaz gráfica de usuario (GUI) al usuario. Los comandos y los parámetros necesarios que se ejecutarán se escriben en el shell. El shell Bourne también es un lenguaje de secuencias de comandos que permite a los usuarios crear y ejecutar archivos de secuencias de comandos que pueden procesar datos a través de múltiples programas mediante un solo comando. En sistemas similares a Unix®, el programa se conoce simplemente como «sh».

Los primeros shells de este tipo para sistemas Unix® se conocieron como shell Thompson, creado por Ken Thompson, uno de los creadores originales del sistema operativo Unix®. El shell de Thompson se limitaba a la interpretación de comandos y había que ejecutar una serie de funciones adicionales como operaciones externas. Más tarde, Stephen Bourne creó el shell Bourne para reemplazar el shell de Thompson, agregando una serie de características nuevas en el propio shell, así como el lenguaje de programación del shell.

En realidad, el shell Bourne se planeó como un lenguaje de secuencias de comandos desde el principio. Si bien todavía era la interfaz de línea de comandos para la versión siete de Unix®, también abrió la posibilidad para que los usuarios desarrollaran scripts de shell que unieran los comandos para procesar datos. Mediante el uso de esta programación, el usuario podría establecer variables para capturar datos conocidos o desconocidos de entrada o salida y manipular el procesamiento de esos datos mediante el uso de declaraciones condicionales en el script mediante una técnica denominada flujo de control.

Este también fue el primer shell en implementar una característica conocida como manejo de señales. A través del shell de Bourne, un usuario puede enviar un tipo específico de señal a un proceso que ya se está ejecutando en la computadora, indicando a ese proceso que haga otra cosa. Muchas de estas son formas de detener un proceso que se está ejecutando y producir algún tipo de salida que se puede utilizar para la depuración, aunque existen otras para detener temporalmente un proceso, reanudarlo, etc.

La capacidad de controlar directamente los descriptores de archivos fue otra novedad para el shell Bourne. En un sistema similar a Unix®, cada programa en ejecución tiene una tabla que enumera los descriptores de archivo para cualquier archivo abierto. Esto puede incluir cualquier cosa, desde un simple archivo de texto hasta un directorio o incluso los sockets de comunicación que utilizan los procesos para compartir datos entre sí. El hecho de que un usuario tuviera control sobre los descriptores de archivos en un sistema permitía un control sin precedentes sobre la entrada y salida de prácticamente todo en la computadora.

Por supuesto, aunque el shell Bourne ofrecía una funcionalidad adicional a los usuarios, carecía de características como la capacidad de controlar procesos de forma interactiva, establecer alias de comandos y conservar un historial. Más tarde, sin embargo, comenzaron a surgir varios descendientes que tomaron las características de caparazón más útiles que se habían ideado a lo largo de los años y las convirtieron en nuevas capas. Un ejemplo común es el shell Bourne-again, o Bash, que es común en muchos sistemas LINUX®. Como resultado, muchos de estos descendientes son completamente capaces de ejecutar scripts de shell Bourne regulares, dando a cada sistema similar a Unix® alguna implementación del shell Bourne original de una forma u otra. En muchos sistemas LINUX®, esto es simplemente un enlace de «sh» a «bash» o algún otro descendiente capaz.