Ya hemos visto antes una breve introducción a los intérpretes. Vamos a explayarnos un poco más en ellos para darles contexto.
- Bourne Shell (sh): desarrollado por Stephen Bourne, cuyo objetivo era aprovecharse de las características del núcleo de UNIX (listar parámetros/argumentos y utilizar las variables del entorno). Incorpora características como control de procesos, redirección de entrada/salida, listado y lectura de ficheros, protección de acceso/lectura/escritura de ficheros, comunicaciones y un lenguaje para escribir programas por lotes (scripts). Fue el estándar que se ha utilizado en las primeras versiones de UNIX y adaptado a Linux.
- Bourne-Again Shell (bash): desarrollado por Brian Fox para el proyecto GNU (con el fin de sustituir Bourne Shell), se lanzó en 1989 y se ha utilizado como la shell de inicio predeterminado para la mayoría de las distribuciones de Linux y Mac (además de existir versiones para Windows 10 y Android). Su sintaxis de órdenes es un superconjunto de instrucciones basadas en la sintaxis del intérprete de comandos Bourne. Este procesador de comandos permite leer y ejecutar comandos desde un archivo (script de shell), es compatible con el agrupamiento de nombres de archivos, tuberías, sustitución de comandos, variables y estructuras de control. Permite el uso de palabras reservadas, variables dinámicas y otras características básicas del lenguaje que provienen de sh.
- Almquist Shell (ash): desarrollado por Kenneth Almquist y publicada en el grupo de noticias de Usenet comp.sources.unix. Se trata de una réplica de la variación de System V (La V.4 de Bourne Shell). Es una edición más sencilla y rápida, que no proporciona edición de línea o historial de comandos y la convierte en una terminal idónea para máquinas con pocos recursos de memoria.
- Debian Almquist Shell (dash): se trata de una variación directa de ash, migrado a GNU/Linux a principios de 1997 por Herbert Xu. Dash, al igual que ash, ejecuta los scripts de una forma más rápida que bash, y al contar con menos dependencias es más estable en el caso de que surjan problemas debido a actualizaciones o en el disco duro. Desde la versión 6.10, dash es el intérprete de comandos por defecto que utiliza Ubuntu.
- KornShell (ksh): desarrollado por David Korn en 1980, divulgado el 14 de julio de 1983 en la USENIX. Su desarrollo inicial se basa en Bourne Shell, además de las contribuciones al código que añadieron el modo de edición emacs y vi para la línea de comandos. Su principal ventaja es el uso como lenguaje de programación (desde su inicio se agregaron muchas capacidades), además de un control de tareas, tres estilos de edición desde la línea de comandos (vi, Emacs, XEmacs), vectores asociativos y aritmética de coma flotante, extensibilidad de comandos integrados de forma dinámica. Las funciones avanzadas de ksh para el manejo de ficheros de comandos lo pusieron a la par con lenguajes como awk y perl. KornShell es compatible con versiones anteriores de Bourne Shell.
- C Shell (csh): desarrollado por Bill Joy en 1970 al terminar de graduarse en la Univeridad de Bekeley de California, se trata de un intérprete de comandos de UNIX. Permitió incluir características interactivas junto con un estilo generalizado que lo hicieron fácil de utilizar. Incluye un lenguaje de comandos similar al lenguaje de programación C, además de incorporar características de otros intérpretes de comandos como el soporte de caracteres comodines, tuberías, sustitución de comandos, variables, condicionales, etc.
- TENEX C Shell (tcsh): desarrollado por Ken Greer a finales de los años setenta en la Universidad de Carnegie Mellon, de Pittsburgh, reemplazó a csh como intérprete de comandos. La T proviene de TENEX, un sistema operativo que inspiró a su creador. Basado en C Shell y compatible con él, es básicamente C Shell con mejoras y algunas características extras como el autocompletado de nombres o la edición en la propia línea de comandos.
- Z Shell (zsh): este intérprete de comandos lo creó Paul Falstad en 1990 y se alimentó de las características que se han visto de los intérpretes de comandos citados anteriormente: sh, ash, bash, csh, ksh, tcsh. Se diseñó para usarse de forma interactiva.
Los intérpretes de comandos necesitan leer sus correspondientes ficheros de configuración para poder operar de forma óptima al realizar diferentes funciones; a continuación, se muestran algunos de dichos ficheros:
