Cronologia (acquisita non attraverso la ricerca ma trascorrendo troppo tempo in giro con le persone dei Bell Labs):
-
All'inizio (se si considera che l'inizio è Unix versione 7) c'era la shell Bourne. Steve Bourne fu il primo a dimostrare che la shell che controllava l'interazione dell'utente poteva essere un programma utente e non una parte speciale del sistema operativo. Una svolta storica. La shell stessa era relativamente pulita per lo scripting, ma non aveva la modifica della riga di comando o il controllo del lavoro. Introduzione alla Unix Shell di Bourne è ancora utile per gli utenti principianti oggi.
Modifica :Ho ignorato un po' di "preistoria" di Ken Thompson e John Mashey, anche loro di Multics. Sono sicuro che Bourne era a conoscenza di tutto questo lavoro (era nello stesso laboratorio, 1127, presso i Bell Labs), ma il guscio di Bourne era definitivo e il lavoro precedente ebbe poca influenza se non come interpretato da Steve Bourne. Ad esempio, sebbene Ken in seguito abbia scritto il compilatore Plan 9 C e sia stato molto influente su Plan 9, l'articolo di Tom Duff sulla shell Plan 9 (rc) menziona solo la shell di Bourne, non quella di Thompson.
-
La shell è solo un programma utente, quindi chiunque può scriverne uno. Mentre Unix versione 7 veniva creato nel New Jersey, Berkeley Unix veniva creato in California. Bill Joy a Berkeley ha scritto
csh
, la shell C. Joy ha aggiunto il controllo del lavoro e la cronologia, e successivamente l'editing della riga di comando, ma non era a conoscenza del lavoro di Bourne e quindi ha basato il suo linguaggio sulla shell Thompson (che ho considerato "preistorico" nel punto precedente). La comunità Unix amava il job control, ma amava anche il linguaggio di Bourne. Per una polemica non particolarmente positiva contro il linguaggio csh, vedere Csh Programming Considered Harmful. Per un certo periodo, molte persone hanno usatocsh
in modo interattivo per le sue caratteristiche di controllo del lavoro e cronologia, ma utilizzava ilsh
di Bourne scrivere sceneggiature. Questa situazione era tutt'altro che ideale.Modifica :Grazie a DigitalRoss per avermi chiarito la cronologia di
csh
. Dato che ho ricevuto la mia istruzione da persone che si riferiscono a BSD come "l'eresia di Berkeley", ero piuttosto a corto di fatti. -
Dave Korn dei Bell Labs ha eseguito una brillante reingegnerizzazione della shell Bourne per produrre la shell Korn (ksh). Era completamente retrocompatibile con la shell Bourne
sh
ma ha fornito un carico di miglioramenti inestimabili.ksh
è diventato la base di uno standard POSIX ed è stato fornito come standard con il software Sun. (Questo nonostante il fatto che Bill Joy abbia lasciato Berkeley per aiutare a fondare Sun ed è stato uno dei loro principali ragazzi del software.) -
Bell Labs e AT&T stupidamente non riescono a fare
ksh
fonte aperta.ksh88
è ampiamente utilizzato, ma avere fonti non è legale. Alcune persone diventano così dipendenti da diventare criminali digitali.Modifica :Era davvero così stupido? Difficile da sapere. Berkeley stava già dando via Unix, e presto sarebbero seguite altre società, ma questa era ancora l'era in cui i Corporate Masters credevano nel far pagare Unix. Ma i risultati:AT&T Unix è morto, dopo essere stato svenduto a varie parti un numero qualsiasi di volte. BSD e i suoi derivati sono vivi e vegeti, ma queste nuove cose chiamate "Linux" e "GNU" hanno un'enorme frazione di mindshare che un tempo apparteneva ai Bell Labs.
-
La Free Software Foundation fa un'implementazione "clean-room", da zero di una shell POSIX, prendendo tutte le idee di Dave Korn come attuali, oltre al solito stile FSF aggiungendo nuove funzionalità proprie, come il completamento programmabile. La chiamano shell "Bourne again", o
bash
. -
A metà degli anni '90 AT&T open source
ksh93
, ma ormai è troppo tardi per un'adozione diffusa. L'accordo di licenza è stranamente non standard.bash
eksh
divergere eksh
non raggiunge mai una quota di mercato proporzionata al suo posto nella storia.
Lezioni:
-
Vince il primo prodotto adeguato da immettere sul mercato (sh).
-
Le persone adorano le nuove funzionalità (controllo dei processi, completamento dei comandi), ma le amano ancora di più quando i loro vecchi script continuano a funzionare.
-
Modifica :I professori di ingegneria dovrebbero lasciare la storia agli storici della scienza :-)
Bash ha due cose completamente diverse.
-
È un bel guscio. È forse una delle 2 shell (l'altra è zsh) che integrano alcuni dei fantastici
csh
funzioni come!
sostituzione della storia nella sintassi posix. Ha molte estensioni, inclusi gli array. -
È la shell FSF/GNU. Nel mondo open source, questo gli conferisce una sorta di prestigio.
Dovrei anche aggiungere che non è sempre l'impostazione predefinita. ash
è spesso usato come /bin/sh in modo che mentre bash
potrebbe essere la shell interattiva, ash
è la shell "basta eseguire il file di comando". Questo perché ash
è più piccolo e più veloce e contiene le funzionalità posix, quindi è un sottoinsieme appropriato. Usando ash
come shell interattiva a volte è problematico. Su, diciamo, NetBSD, funziona bene, perché lì è costruito con tutte le funzionalità. È una specie della loro unica shell mentre bash
è un pacchetto esterno. Ma su Linux ash
è solitamente considerato non interattivo, quindi lo compilano senza la cronologia e senza la (importante) modifica della riga sulla teoria che è usato solo per eseguire quegli enormi gnu configure
script.
Racconto di due conchiglie
La vera storia della conchiglia
AGGIORNAMENTO: C'è una cronologia imprecisa della shell che viene copiata da un posto all'altro sul web e le persone ci credono comprensibilmente. Cercherò di fornire una versione accurata e fornirò alcuni link per sostenerla qui.
- La prima shell non era certamente la shell Bourne, ma è stata scritta dallo stesso Ken Thompson e distribuita in V6, che è la versione che AT&T ha inviato a varie università e laboratori governativi. Questo è ciò che ha messo Unix sulla mappa. Aveva tutte le basi,
<, >, >>, |, &
, ma conteneva semplicementegoto
controllare la sintassi tramite un programma esterno che ha cercato sullo standard input. Allora non c'erano script di shell complessi. Le shell successive aprirebbero l'input del comando su un fd separato. Può sembrare semplice oggi, ma nel film horror che era l'informatica degli anni '70 era la cosa migliore sulla terra. Che tu ci creda o no, questa antica conchiglia ha oggi il suo stream Twitter e, naturalmente, una home page. - La seconda shell era
csh
, scritto (come eravi
) di Bill Joy alla UCB. Questo era prima di GNU readline e NetBSD editline, quindi deve essere sembrato perfettamente ragionevole fare la storia con il!
sintassi. Csh ha aggiunto la maggior parte delle funzionalità della shell odierne ma con la sintassi csh. csh non ha modificato alcuna sintassi , gratuitamente o in altro modo. In realtà era retrocompatibile con la shell Thompson e originariamente includeva il codice sorgente di TS. - La terza shell era la shell Bourne, con una sintassi diversa. Unix veniva sviluppato in parallelo presso UCB e AT&T. Questa shell aveva uno strano allocatore di memoria (penso che usasse solo più memoria, intrappolasse SIGSEGV, facesse un nuovo brk(2) e poi riprovasse) che rendeva difficile l'esecuzione sui nuovi port Unix, quindi
osh
ecsh
rimase popolare per qualche tempo. Non c'era internet e c'era una licenza SW, quindi in quell'ambiente è possibile che Stephen Bourne non sapesse della shell di Joy e certamente Joy non sapesse di Bourne. È possibile che le due shell si siano incontrate per la prima volta quando UCB ha ottenuto un VAX e una versione preliminare dell'ormai dimenticato Unix/32V. Ricordo che Bill si lamentava dell'allocazione della memoria. Nota che entrambe le shell erano retrocompatibili con la shell V6 , hanno semplicemente esteso la sintassi in direzioni diverse. - Ora c'erano davvero più shell incompatibili, a cui AT&T ha aggiunto la
ksh
compatibile con Bourne . Alla fine,csh
aveva un codice sorgente semi-disponibile, ma era coinvolto in una causa legale tra AT&T e l'Università della California. Tuttavia, questi erano i giorni di gloria di BSD Unix poiché le aziende sofisticate che potevano permettersi la quota di $ 50.000 acquistavano la licenza AT&T ma installavano le distribuzioni 4.x BSD e le università la ricevevano gratuitamente. - In questa situazione con molti problemi legali e tecnici, sono state intraprese varie implementazioni indipendenti. Almeno altrettanti sono andati con il
csh
sintassi come è andata con la sintassi della shell Bourne, e alcuni hanno unito i due. Hai avuto almenotcsh
,zsh
,bash
eash
. La sintassi Bourne era "ufficiale", essendo parte dei rilasci di AT&T, ma a quei tempi BSD era piuttosto importante, e Sun, inizialmente BSD, distribuiva una buona parte del SW Unix che il mondo incontrava. - In parte a causa della causa USL, la FSF e Linux avevano un campo aperto. Nel frattempo, AT&T era riuscita a litigare con una delle poche entità sulla terra più grandi di loro (Lo Stato della California) e alla fine non vinsero la causa, e così alla fine la distribuzione BSD era su una solida base legale piede. Ma a quel punto Linux e bash erano ovunque, e quindi oggi BSD è una nicchia.
- Infine, bash è una buona shell (sebbene apparentemente rinnegata privatamente dal suo autore originale) e merita pienamente il merito del proprio successo. csh sarebbe stato eclissato da tcsh e zsh anche se ash, bash e ksh non avessero vinto la guerra della sintassi.
Da aggiungere a quanto detto da @DigitalRoss
- Bash è un sostituto completo di superset per posix-sh, al punto che se chiamato come /bin/sh emulerà completamente posix-sh. Posix-sh era lo "standard" per i sistemi unix commerciali come shell a denominatore comune. Quindi, qualcosa che inizia lì e si basa su di esso inizia con molto.