Thompson shell

De Wikipedia, la enciclopedia libre
Ir a la navegación Ir a la búsqueda
Thompson shell
Tipo de programa Shell de UNIX
Desarrollador Ken Thompson
Lanzamiento 1971

El Thompson shell es el primer shell de Unix, introducido en la primera versión de Unix en 1971, y fue escrito por Ken Thompson.[1]​ Era un simple intérprete de comandos, no diseñado para secuencias de comandos, pero, sin embargo, introdujo varias funciones innovadoras. Presenta las características de la interfaz de línea de comandos y condujo al desarrollo de las shell de Unix posteriores.

Historia[editar]

El nombre de "shell" para un intérprete de línea de comandos y el concepto de hacer la shell de un programa de usuario fuera del sistema operativo de núcleo se introdujeron en el precursor de Unix Multics.

Una de las características iniciales del Thompson shell era una sintaxis compacta para la redirección de entrada/salida. En Multics, la redirección de la entrada o salida de un comando requería comandos separados para iniciar y detener la redirección; en Unix, uno podría simplemente agregar un argumento a la línea de comando que consiste en el símbolo < símbolo seguido de un nombre de archivo para la entrada, o el símbolo > para la salida, y el shell redirigiría la E/S durante la duración del comando. Esta sintaxis ya estaba presente en el lanzamiento de la primera versión de Unix en 1971.

Una adición posterior fue el concepto de tuberías . Como sugiere Douglas McIlroy, la sintaxis de redirección se amplía para que la salida de un comando pudiera pasar a la entrada de otro comando. La sintaxis de la tubería original, como se describe en el manual de la Versión 3, era:

 comando1> comando2> 

Esta sintaxis resultó demasiado ambigua y se confundió fácilmente con la redirección hacia y desde los archivos; el sistema no puede determinar si "comando2" es el comando "comando2" o el archivo "comando2". Por la Versión 4, la sintaxis había cambiado para usar los símbolos pleca ("|") y el acento circunflejo ("^") para establecer las tuberías:

 comando1 | comando2 

Esto produce exactamente el mismo resultado que:

 comando1 ^ comando2 

El símbolo > cambió a:

 comando1 > archivo1 

Esto pondría la salida de command1 en file1.

La sintaxis de shell de Thompson para redirigir con < y >, y canalizar con |, ha demostrado ser duradera y ha sido adoptada por la mayoría de los demás shells de Unix y shells de comando de varios otros sistemas operativos, especialmente en DOS, OS / 2 y Microsoft Windows .

Declinación y reemplazos[editar]

El diseño de la shell era intencionalmente minimalista; incluso las instrucciones if y goto, esenciales para el control del flujo del programa, se implementaron como comandos separados.[1]​ Como resultado, en el lanzamiento de 1975 de la Versión 6 de Unix, se estaba volviendo claro que el shell de Thompson era inadecuado para las tareas de programación más serias.

En este momento, los desarrolladores de la distribución de Programmer's Workbench UNIX, especialmente John Mashey, comenzaron a modificar el shell Thompson para hacerlo más adecuado para la programación.[1]​ El resultado, conocido como el shell PWB o el shell Mashey, incluyó mecanismos de control de flujo más avanzados e introdujo variables de shell, pero se mantuvo limitado por la necesidad de seguir siendo compatible con el shell Thompson.

Finalmente, el shell Thompson fue reemplazado como el shell principal de Unix por el shell Bourne en la Versión 7 Unix y el shell C en 2BSD, ambos lanzados en 1979. Dado que prácticamente todos los sistemas modernos de Unix y similares a Unix descienden de V7 y 2BSD, el shell Thompson generalmente ya no se usa. Sin embargo, está disponible como código abierto como parte de varias distribuciones de fuentes de Ancient Unix, y se ha trasladado a los Unices modernos como una exhibición histórica.

Referencias[editar]

  1. a b c J. R. Mashey (13 de octubre de 1976). Using a Command Language as a High-Level Programming Language. Proceedings of the 2nd International Conference on Software Engineering. pp. 169-176. 

Enlaces externos[editar]