2010-04-27 19 views
9

È meglio scrivere script Bash o script Bourne? Il mio team scrive script di Bourne, ma non sono del tutto sicuro del perché.Script Bash o Bourne?

Se questa è una questione di guerra santa (es .: vim vs. emacs), per favore basta rispondere: guerra santa.

+5

basta che non csh –

+1

[Programmazione Csh Considerato Nocivo] (http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/) –

+0

codice di programmatori REALE in Korn! :-P Preferisco sempre sh rispetto a bash, perché la maggior parte delle cose sintattiche/caratteristiche saranno uguali o almeno compatibili con il comportamento sh in molte distro; mentre bash non è disponibile in alcuni casi se lavori con AIX ecc. Ma se lavori con script solo per Linux, bash è preferibile. Rende la programmazione molto più semplice. –

risposta

11

Dipende dalla piattaforma di destinazione.

Se si sta solo prendendo di mira, ad esempio, le principali distribuzioni Linux e Mac OS X, allora si può essere certi che questi sistemi avranno a disposizione bash. Su altri UNIX (ad esempio, AIX, Solaris, HP-UX), bash potrebbe non essere necessariamente presente, quindi Bourne è la scelta più sicura. Se bash è disponibile, non riesco a pensare a nessun motivo per cui potresti preferire Bourne.

12

Puoi essere più sicuro che la shell Bourne verrà installata su un dato computer Unix. Sì, Bash è onnipresente su Linux, ma il mondo intero non è Linux.

+0

Un po 'lungo queste linee, posso pensare solo a tre ragioni: retrocompatibilità, portabilità o "è così che l'abbiamo sempre fatto". –

+2

"Bash è onnipresente su Linux, ma il mondo intero non è Linux." Questa era la mia convinzione prima, quindi ho iniziato a lavorare con le macchine Solaris e HP-UX. Pensavo di poter scrivere script di shell in Bash per queste macchine, oh, quanto mi sbagliavo. Ma è stata una buona esperienza di apprendimento, ora uso sempre la shell di Bourne e solo la sintassi che conosco è POSIX compatibile. – Anders

4

Beh, è ​​una questione di gusti, ma per i principianti, gli script di shell di Bourne possono essere eseguiti con bash, e penso che bash abbia funzionalità che non possono essere eseguite da Bourne.

10

La cosa più importante è ricordare che non tutti i SO si collegano/bin/sh a/bin/bash, come fanno alcune distribuzioni Linux. Molti script sono scritti per bash ma iniziano con:

#!/bin/sh 

in modo che si interrompano ad es. in Ubuntu. Così, quando si scrive lo script bash, sempre scrivere:

#!/bin/bash 
+6

Uno dei miei coworkker era arrabbiato con Ubuntu perché usava qualcosa di diverso da bash per/bin/sh. Gli ho detto che dovrebbe essere arrabbiato con gli idioti che hanno etichettato le loro copioni come copioni, ma non sarebbe stato d'accordo con me. –

+1

No, dovresti sempre scrivere '#!/Usr/bin/env bash'. Bash potrebbe essere installato su/bin/bash sulla tua macchina, ma non è standardizzato e non universale. Se ti limiti a '#!/Bin/sh', tuttavia, probabilmente starai bene. –

0

mi piacerebbe andare per Bourne Again Shell, come la Bourne shell può essere leggermente diverso tra le implementazioni UNIX. Con bash puoi star sicuro che bash è sempre bash.

+0

Non direi che le diverse shell funzionano in modo diverso. Qualsiasi shell che conosco ricadrà sul comportamento della shell di bourne se è stata avviata come 'sh' – soulmerge

+0

Ho visto diverse implementazioni di bourne shell (sh) che si comportano diversamente. Forse non è più così. – topskip

+2

"Con bash puoi essere sicuro che bash è sempre bash." A meno che non si tratti di una versione diversa di Bash. Ci sono ovviamente differenze significative tra i numeri di versione principali, ma ci sono anche alcuni tra numeri di versione minori. –

1

Portabilità. Scrivo #!/bin/sh a meno che le cose non diventino davvero dolorose, e poi scrivo #!/bin/bash. Il mondo sta cambiando molto rapidamente e scommetto che in futuro sarà facile convincere gli amministratori di sistema a installare bash. Ma io sopporto le mie scommesse usando Bourne per la maggior parte delle cose, il che è semplice.

1

Su Mac OS X/bin/sh NON è una shell Bourne. (Ma potresti avere una vera bournesh su carne fresca).

Per identificare una shell Bourne tradizionale, si può provare a utilizzare il circumflex^(punto di inserimento) come sostituto per | (tubo).

See:

Il tradizionale Bourne Shell Famiglia,

http://www.in-ulm.de/~mascheck/bourne/

1

che uso come mio Bash shell di login, ma per lo scripting sceglierei la Bourne shell in qualsiasi giorno della settimana e due volte di domenica. Bash ha caratteristiche migliori, migliore facilità d'uso e bug migliori.

In realtà, lo stesso materiale che mi fa scegliere Bash quando effettuo l'accesso, mi evita durante lo scripting. Bash cerca di rendere tutto bello e accogliente per l'utente, ma a spese di un eseguibile 776   kB (sulla mia macchina), rispetto a 140   kB per la shell Bourne. Perché il mio script dovrebbe preoccuparsi della facilità d'uso? Qualsiasi guadagno che potrei ottenere usando l'intelligente funzione Bash viene effettivamente annullato dall'impronta della shell, che è più di cinque volte più grande.

Ho computer che eseguono Linux, FreeBSD e OS X. Anche se raramente mi muovo tra i computer, è bello avere la possibilità. In uno script di shell Bourne, è sufficiente digitare

#!/bin/sh 

e funziona. Sempre. Bash potrebbe essere comune su Linux, ma non è standardizzato come la shell Bourne. Su FreeBSD, Bash non è installato di default. Può essere installato da Porte se il sysadmin pensa che sia una buona idea ma, anche allora, finisce in /usr/local/bin/bash (non /bin/bash). Pertanto, se si decide di andare con Bash, è necessario scrivere

#!/usr/bin/env bash 

per rendere lo script portatile. env troverà la shell per te, indipendentemente dal tuo gusto Unix (purché sia ​​installato).

Alla fine della giornata, è la vostra scelta. Assicurati che i tuoi script siano in realtà conformi allo alla shell che scegli, e non basandoti sul fatto che "sh" sia simulato con "bash" o qualcosa di simile.