Altri hanno sottolineato che le premesse della domanda, che la shell Bourne Again è predefinita e onnipresente, sono decisamente sbagliate.
Inoltre, ci sono davvero buone ragioni per usare qualcosa di diverso dalla shell Bourne Again per interpretare gli script della shell. Queste ragioni hanno motivato il grande progetto di Ubuntu e Debian, nel corso di diversi anni, per rimuovere i bashismi e far sì che molti degli script di shell fossero eseguiti dall'inizializzazione del sistema (che era un sacco di script di shell con System 5 rc
) e l'installazione / rimozione dei pacchetti usa il Shell Debian Almquist invece della shell Bourne Again.
In poche parole: la shell Bourne Again, piena zeppa di funzionalità interattive com'è, non è l'interprete shell più veloce per uno script di shell conforme a POSIX. Quindi se uno può rendere i propri script shell conformi a POSIX, interpretandoli con un programma più leggero, come la shell Debian Almquist, il proprio sistema funzionerà meglio. (Alla fine, Debian ha dovuto apportare lievi modifiche alla shell Almquist, per aggiungere il supporto per un paio di costrutti shell non POSIX che erano semplicemente troppo profondamente e ampiamente incorporati e troppo utili per sbarazzarsi di.)
Il risultato è stato un grande vantaggio nelle prestazioni del bootstrap.
Quindi ci sono due distinte classi di shell da considerare, qui:
- Le shell con tutte le funzionalità interattive appariscenti, che sono configurate come shell di accesso interattive per gli utenti nel database degli account.
- Le shell che interpretano rapidamente molti script, che vengono utilizzate come interpreti di script dai programmi di script di shell.
Si noti che parlare di questo come "preferire /bin/sh
" è semplificare eccessivamente. Debian in realtà aveva almeno due obiettivi:
Di fronte agli amministratori che usano la shell Debian Almquist, la shell Z (in modalità POSIX), la shell Bourne Again (in modalità POSIX), la shell MirBSD Korn e altri come /bin/sh
, c'erano ...
... rendendo gli script il più portatili possibile, in modo che il passaggio a ciò che è stato /bin/sh
mappato non abbia rotto le cose; o
... creare script non portatili indirizzare esplicitamente il programma interprete corretto , invece di aspettarsi semplicemente quella /bin/sh
mappa.
C'era rendendo il Debian Almquist guscio la mappatura predefinita per /bin/sh
al posto del Bourne Shell, in modo che tali script che erano POSIX-conforme (o, più propriamente, Debian Policy Manual conforme) correva più rapidamente.
E ovviamente una volta che ci si immerge in questo, si può andare molto oltre; come considerare i compromessi di efficienza di simili /bin/true
ed /usr/bin/clear
essere script di shell o programmi compilati. Ma questo va oltre lo scopo di questa risposta, per fortuna. ☺
Niente di tutto questo è molto nuovo, nemmeno specifico per Unix, ovviamente. Già prima della fine del secolo, ho scritto e pubblicato un interprete da riga di comando che presentava sapori sia "interattivi" che "non interattivi", spiegando questa stessa divisione nel suo doco e notando la differenza tra le variabili COMSPEC
e OS2_SHELL
ambiente. Allo stesso modo, la discussione sulla rimozione dei bashismi nel sistema V di Debian rc
e negli script di installazione / rimozione dei pacchetti risale agli anni '90.
Ulteriori letture
/bin/sh
se non si utilizzanobash
funzioni specifiche . Un giorno potresti dover usare uno dei tuoi script su un sistema su cui non è installato (server remoto, computer incorporato ...)