¿Por qué bash sigue siendo el estándar de facto en MacOS para el scripting a nivel de SO? Por qué no hay nuevos contendientes?

Edición de junio de 2019: Apple está cambiando a zsh para macOS Catalina (v10.15).

-

Hay algunas buenas respuestas aquí, hasta ahora.

Añadiré un poco de historia para señalar que bash no fue el predeterminado hasta la versión 10.3 Panther. Antes de eso, tcsh era el shell por defecto en Mac OS X v10.0 a v10.2.

Antes de eso, estaba el Mac OS X Server 1.0 original (la primera versión de Rhapsody). Mac OS X Server surgió de la adquisición de NeXTSTEP, e incluía una zona de usuario 4.4BSD. Los bichos raros de Berkeley adoraban su csh, y Mac OS X Server 1.0 utilizaba ese mismo userland 4.4BSD con ese mismo csh en la versión original. Mientras tanto, las variantes comerciales de SysV usaban Bourne y a veces Korn shell. Linux adoptó Bash desde el principio, ya que era un shell compatible con Bourne y con licencia GPL de la FSF.

El cambio a tcsh fue parte de la mejora continua de Apple en el núcleo de Darwin, y gran parte de ello incluía la sustitución de gran parte del userland de 4.4BSD con FreeBSD (y partes de NetBSD, etc.), ya que esos proyectos se mantienen activamente.

Pero nada de esto responde a su pregunta real, que es: ¿por qué se sigue utilizando bash, ese viejo y maltrecho shell de los días de antaño?

La respuesta es porque bash no es viejo y maltrecho. Bash es un ejemplo de la evolución del software para hacer lo que sus usuarios necesitan que haga. Es compatible con el shell Bourne (necesidad original), incorporó características útiles de csh (historial de comandos, control de trabajos, etc), y adopta mecanismos de otros lenguajes para mejorar su sintaxis de programación. El equipo sigue lanzando nuevas características y mejoras periódicamente, pero fundamentalmente sigue siendo el mismo shell del que escribieron Kernigan y Pike en The Unix Programming Environment.

¿Y por qué se sigue utilizando el shell de Unix, independientemente de la versión o implementación actual? Porque todavía no ha aparecido nada mejor.

Apple necesita un shell. Bash proporciona la mejor hasta la fecha. Apple puede elegir entre gastar dinero en el desarrollo de un nuevo shell y no obtener ningún aumento de ingresos por ello, o poner más dinero y desarrollo en otras mejoras. Cualquiera que compre un Mac y espere usar Terminal.app sabe lo que va a obtener: un shell similar al de su caja de Ubuntu en casa, un shell similar al de su servidor Red Hat en el trabajo, o un shell similar al que usaba en su PDP en la universidad. Nadie está gritando "¡Danos un nuevo shell!". Bash, al igual que sh, csh, ksh, zsh, y todos los demás, te da un entorno interactivo que puede ser tan simple o complejo como lo necesites, y también es un entorno totalmente programable adecuado para la programación basada en tareas.

De igual manera, Red Hat, Canonical, Slackware, Debian, y otras distribuciones de Linux seguirán usando GNU bash por las mismas razones. Hay cosas más importantes en las que trabajar. El mundo del código abierto puede producir un shell nuevo y mejorado cuando algún hacker inteligente decida que puede hacerlo mejor para satisfacer las necesidades del nuevo milenio. Incluso puede que ya haya algunas flotando por ahí, esperando a que las adopten.

En cuanto una de ellas gane uso generalizado, puedes apostar tu dulce egrep '^[:alpha:]]{2}sThere may even be a few floating around already, just waiting for adoption.

As soon as one of these gains mainstream usage, you can bet your sweet egrep '^[[:alpha:]]{2}s$' /usr/share/dict/words | sed s/^../as/ | uniq that Apple will add it to the OS.apos; /usr/share/dict/words | sed s/^../as/ | uniq a que Apple la añadirá al sistema operativo. Y si un número suficiente de usuarios empieza a usarlo con regularidad, y a cambiar sus shells por defecto a él, Apple lo convertirá en el predeterminado.

Hasta entonces, bash es la vida.