La respuesta corta a "por qué el shell sh original no está presente sh
" es que no hay sh original.
Bueno, está bien: es el caparazón de Thompson . La versión 1 tenía algunas de las características que conocemos hoy, en particular la redirección y las canalizaciones (lea el documento de Dennis Ritchie sobre la historia temprana de Unix ). Las versiones posteriores agregaron características tales como ejecución en segundo plano &
, globbing (implementado con un programa externo) y algunas formas de citas, pero no tenía variables ni estructuras de control anidadas. Las condiciones y los bucles se proporcionaron a través de programas externos if
(que tomaban una condición y un comando como argumentos) y goto
(que funcionaba cambiando la posición del archivo de su padre en el archivo de script).
En 1979, en Unix V7 , el shell Thompson fue reemplazado /bin/sh
por el shell Bourne . La primera versión ya tenía muchas de las características que están presentes en el tablero hoy, y las versiones posteriores introdujeron muchas más . Unos años más tarde, el caparazón de Korn entró en escena, con un conjunto de características cada vez mayor; muchas variantes de Unix lo instalaron bajo el nombre ksh
.
En 1992, POSIX codificó un conjunto mínimo de sh
características que era básicamente Bourne más algunas cosas. Cualquier sistema que se llamara a sí mismo "Unix" tenía que implementar al menos estas características. Los sistemas comerciales de Unix generalmente usaban ksh como POSIX sh, pero algunos (por ejemplo, OSF / 1 ) tenían el suyo.
Ni el shell Bourne ni el shell Korn eran de código abierto hasta hace relativamente poco, así que cuando el mundo Linux comenzó a formarse a mediados de la década de 1990, no estaban disponibles. /bin/sh
Tenía que ser otra cosa. La mayoría de las distribuciones de Linux fueron para bash , un shell del proyecto GNU que tendía a estar entre Bourne y Korn en términos de funciones de secuencias de comandos, y mucho mejor que cualquiera de ellas para uso interactivo). La única alternativa viable era pdksh ("dominio de Korn de dominio público"), una versión gratuita (ahora descontinuada, pero que vive como mksh , que está desarrollada activamente ), pero no recuerdo una distribución de Linux usando pdksh como/bin/sh
, No sé por qué, supongo que porque las distribuciones de Linux siempre fueron distribuciones de GNU / Linux, básicamente enviaban versiones de GNU de cualquier herramienta para la que existía una versión de GNU.
También hubo varias implementaciones de código abierto de sh
llamadas "cenizas", especialmente el shell Almquist , pero eran muy incompletas, carecían de algunas características POSIX que la gente quería usar. Un programador que era mantenedor de Debian, Herbert Xu , extendió ash para que fuera compatible con POSIX. Finalmente, su versión cambió su nombre a dash, y hubo algún impulso para hacerlo /bin/sh
en Debian en lugar de bash. Ubuntu comenzó antes de que Debian comenzara a tratar sistemáticamente los basismos (el uso de la funcionalidad específica de bash en los #!/bin/sh
scripts) como errores . Ambos cambiaron más tarde ( Ubuntu 6.10 , Debian solo en 2009 ( era un objetivo para lenny pero el cambio solo se realizó después de la liberación de lenny, es decir, en compresión)).
Una de las principales razones para el uso de guión como lugar de fiesta como /bin/sh
es que es mucho más rápido. Esto fue especialmente importante para Ubuntu, que se ha esforzado por mantener cortos los tiempos de arranque desde el principio. Dash también tiende a usar menos memoria que bash, lo cual es algo importante para los scripts de envoltura que se quedan solo para hacer un poco de limpieza cuando sale del programa subyacente. Otro beneficio de dash es que solo se basa en libc (la biblioteca central del sistema), mientras que bash también se basa en bibliotecas de soporte de terminal (no puede comenzar sin ellas, incluso para ejecutar un script); Esto significa que el tablero tiene una mejor oportunidad de seguir trabajando en un sistema dañado.
En algún momento durante el siglo XXI, el shell Korn se convirtió en código abierto y aparecieron versiones de código abierto del shell Bourne (versiones antiguas, porque el desarrollo había cesado años antes). Pero dash y bash estaban demasiado arraigados en el mundo de Linux para que pudieran ganar aceptación, especialmente el shell Bourne, ya que su valor hoy en día es solo histórico. Dash desplazó a Bash porque tenía claros beneficios, pero ninguno de los otros contendientes tiene una ventaja decisiva /bin/sh
.