stringtranslate.com

Concha Thompson

El shell Thompson fue el primer shell de Unix , introducido en la primera versión de Unix en 1971, y fue escrito por Ken Thompson . [1] Era un intérprete de comandos simple, no diseñado para scripts, pero que no obstante introdujo varias características innovadoras a la interfaz de línea de comandos y condujo al desarrollo de los shells de Unix posteriores.

Historia

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

Una de las primeras características del shell Thompson fue 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 podía simplemente agregar un argumento a la línea de comandos que consistiera en el 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 cuando se lanzó la primera versión de Unix en 1971.

Una adición posterior fue el concepto de tuberías . Por sugerencia de Douglas McIlroy , la sintaxis de redirección se amplió para que la salida de un comando pudiera pasarse a la entrada de otro comando. La sintaxis de tubería original, como se describe en el manual de la versión 3, era:

comando1 >comando2>

Esta sintaxis resultó demasiado ambigua y se confundía fácilmente con la redirección hacia y desde archivos: el sistema no puede determinar si "command2" es el comando "command2" o el archivo "command2". En la versión 4, la sintaxis había cambiado para utilizar los símbolos | y ^ para indicar las tuberías:

comando1 | comando2

Esto produce exactamente el mismo resultado que:

comando1 ^ comando2

El símbolo > cambió a:

comando1 > archivo1

Esto colocaría la salida del comando1 en el archivo1.

La sintaxis del shell Thompson para redirección con < y >, y canalización con |, ha demostrado ser duradera y ha sido adoptada por la mayoría de los otros shells de Unix y shells de comandos de varios otros sistemas operativos, más notablemente en DOS , OS/2 y Microsoft Windows .

Diseño

El diseño del shell fue intencionalmente minimalista; incluso las declaraciones if y goto , esenciales para el control del flujo del programa, se implementaron como comandos separados. [1]

El shell no tiene ninguna función para comentarios aparte de un comando incorporado :. Los programadores simplemente escriben texto después de este comando, que ignora todos los parámetros y simplemente funciona. Otros comandos incorporados incluyen chdir, exit, login, newgrp, shift, y wait. [2]

El comando if combina los usos de los modernos test de Bourne Shell y if . El comando primero busca una expresión (que puede ser similar a la moderna test o involucrar un comando externo) y luego trata el resto de la línea de comandos como el comando a ejecutar si la condición resulta verdadera. No hay ninguna rama else . [3]

goto se implementa de una manera interesante, ya que está separado del shell. Cuando se le pide que salte a "LABEL", busca en el archivo de comandos actual una línea que diga : LABEL(recuerde que :simplemente se ignora) y luego sale. Cuando el shell intenta leer una línea siguiente, el descriptor de archivo reposicionado lo dirigirá a la ubicación etiquetada. [4]

En el shell de Thompson no existe redirección de descriptores de archivos adicionales aparte de la entrada y salida estándar (0 y 1). La redirección de stderr (descriptor de archivo 2) también requiere un contenedor de programa externo, fd2. [5]

El shell admite el uso de globbing, [2] pero en realidad lo implementa difiriéndolo a un globcomando que reemplaza los argumentos y llama al comando solicitado. [6]

El shell Thompson tiene parámetros posicionales, pero no variables nombradas ni acceso a variables de entorno. Entiende la creación de comandos en segundo plano con &, de forma similar al shell Bourne. Ofrece comillas y escapes de barra invertida, aunque las comillas simples funcionan de forma diferente al shell Bourne. [2]

Declive y reemplazos

Como resultado del diseño simplista, en 1975 con el lanzamiento de la versión 6 de Unix , quedó claro que el shell Thompson era inadecuado para la mayoría de las tareas de programación serias.

En esa época, los desarrolladores de la distribución UNIX Programmer's Workbench , en particular John Mashey , comenzaron a modificar el shell Thompson para hacerlo más adecuado para la programación. [1] El resultado, conocido como shell PWB o shell Mashey, incluía mecanismos de control de flujo más avanzados e introducía variables de shell, pero seguía 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 de Unix y el shell C en 2BSD , ambos lanzados en 1979. Dado que prácticamente todos los sistemas Unix y similares modernos descienden de V7 y 2BSD, el shell Thompson ya no se usa en general. Sin embargo, está disponible como código abierto como parte de varias distribuciones de fuentes de Ancient Unix y se ha portado a los Unix modernos como una exhibición histórica.

Véase también

Referencias

  1. ^ abc JR Mashey (13 de octubre de 1976). Uso de un lenguaje de comandos como lenguaje de programación de alto nivel (PDF) . 2.ª Conferencia internacional sobre ingeniería de software. págs. 169-176.
  2. ^ abc "tsh(1) (html) - TSH(1) - Manuales - Proyecto Etsh (V6Shell)". etsh.nl .
  3. ^ "if(1) (html) - IF(1) - Manuales - Proyecto Etsh (V6Shell)". etsh.nl .
  4. ^ "goto(1) (html) - GOTO(1) - Manuales - Proyecto Etsh (V6Shell)". etsh.nl .
  5. ^ "fd2(1) (html) - FD2(1) - Manuales - Proyecto Etsh (V6Shell)". etsh.nl .
  6. ^ "glob(1) (html) - GLOB(1) - Manuales - Proyecto Etsh (V6Shell)". etsh.nl .

Enlaces externos