Perché bash è ancora lo standard de facto su MacOS per lo scripting a livello OS? Perché non ci sono nuovi contendenti?

Modifica giugno 2019: Apple sta passando a zsh per macOS Catalina (v10.15).

-

Ci sono alcune buone risposte qui, finora.

Aggiungo un po' di storia per notare che bash non era il default fino alla versione 10.3 Panther. Prima di allora, tcsh era la shell predefinita su Mac OS X dalla v10.0 alla v10.2.

Prima c'era l'originale Mac OS X Server 1.0 (la prima versione Rhapsody). Mac OS X Server venne fuori dall'acquisizione di NeXTSTEP, e includeva una userland 4.4BSD. Gli strambi di Berkeley amavano il loro csh, e Mac OS X Server 1.0 usava la stessa userland 4.4BSD con lo stesso csh nella versione originale. Nel frattempo le varianti commerciali di SysV usavano Bourne e talvolta Korn shell. Linux adottò presto Bash, dato che era una shell con licenza GPL e compatibile con Bourne della FSF.

Il passaggio a tcsh era parte del continuo miglioramento di Apple al nucleo di Darwin, e molto di questo includeva la sostituzione di molte delle shell di 4..4BSD con FreeBSD (e pezzi di NetBSD, ecc.), dato che quei progetti sono attivamente mantenuti.

Ma niente di tutto questo risponde alla tua vera domanda, che è: perché sta ancora usando bash, quella vecchia e scrostata shell dei tempi che furono?

La risposta è perché bash non è vecchia e scrostata. Bash è un esempio dell'evoluzione del software per fare ciò che i suoi utenti hanno bisogno che faccia. È compatibile con la Bourne shell (necessità originale), ha incorporato caratteristiche utili da csh (cronologia dei comandi, controllo dei lavori, ecc.), e adotta meccanismi da altri linguaggi per migliorare la sua sintassi di programmazione. Il team sta ancora rilasciando nuove caratteristiche e miglioramenti periodicamente, ma fondamentalmente, è ancora la stessa shell di cui Kernigan e Pike scrissero in The Unix Programming Environment.

E perché la shell Unix è ancora in uso, indipendentemente dalla versione o implementazione attuale? Perché non c'è ancora niente di meglio.

Apple ha bisogno di una shell. Bash fornisce la migliore fino ad oggi. Apple può scegliere di spendere soldi per sviluppare una nuova shell e non ottenere alcun aumento di entrate da essa, o mettere più soldi e sviluppo in altri miglioramenti. Chiunque compri un Mac e si aspetti di usare Terminal.app sa cosa sta ottenendo: una shell simile al suo box Ubuntu a casa, una shell simile al suo server Red Hat al lavoro, o una shell simile a quella che usava su quel PDP al college. Nessuno sta gridando "Dateci una nuova shell! Bash, proprio come sh, csh, ksh, zsh, e tutti gli altri, vi dà un ambiente interattivo che può essere semplice o complesso quanto ne avete bisogno, ed è anche un ambiente completamente programmabile adatto alla programmazione basata su compiti. Ci sono cose più importanti su cui lavorare. Il mondo open source può produrre una nuova e migliorata shell quando qualche hacker intelligente decide che può fare meglio per soddisfare le esigenze del nuovo millennio. Potrebbe anche essercene già qualcuna in giro, che aspetta solo di essere adottata.

Non appena una di queste si diffonde, potete scommettere il vostro dolce 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 che Apple la aggiungerà al sistema operativo. E se un numero sufficiente di utenti inizia ad usarla regolarmente, e a cambiare le loro shell di default con questa, Apple la renderà la predefinita.

Fino ad allora, bash è vita.