¿Qué es el 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 le denomina interfaz de línea de comandos o intérprete de comandos, ya que no proporciona una interfaz gráfica de usuario (GUI) para el usuario. Los comandos y cualquier parámetro necesario que se ejecute 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 tipo Unix®, el programa simplemente se conoce como "sh".
Los primeros shells para sistemas Unix® se conocían como Thompson shell, creado por Ken Thompson, uno de los creadores originales del sistema operativo Unix®. El shell Thompson se limitó a la interpretación de comandos, y varias funciones adicionales tuvieron que ejecutarse como operaciones externas. Más tarde, Stephen Bourne creó el shell Bourne para reemplazar el shell Thompson, agregando una serie de nuevas características en el propio shell, así como el lenguaje de scripting del shell.
En realidad, el shell Bourne se planeó como un lenguaje de script 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 de que los usuarios desarrollaran scripts de shell que vincularían 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 fue también el primer shell en implementar una característica conocida como manejo de señal. A través del shell 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, reanudar, etc.
La capacidad de controlar directamente los descriptores de archivos fue otra primicia para el shell Bourne. En un sistema similar a Unix®, cada programa en ejecución tiene una tabla que enumera los descriptores de los archivos abiertos. Esto puede incluir cualquier cosa, desde un simple archivo de texto a un directorio o incluso los enchufes de comunicación que los procesos usan para compartir datos entre sí. Para que un usuario tenga control sobre los descriptores de archivo en un sistema, se permite un control sin precedentes sobre la entrada y salida de prácticamente todo en la computadora.
Por supuesto, a pesar de que el shell Bourne ofrecía dicha funcionalidad adicional a los usuarios, carecía de características como la capacidad de controlar los procesos de forma interactiva, establecer alias de comando y retener 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 diseñado a lo largo de los años y las convirtieron en nuevas conchas. 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 totalmente capaces de ejecutar scripts de shell Bourne regulares, dando a cada sistema tipo 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.