Cosa non è specifico della shell?


9

Sotto alcune risposte, vedo commenti che raccomandano di evitare comandi specifici della shell nelle risposte.

Come faccio a sapere quali comandi, operatori, ecc. Esistono in tutte le shell? C'è un elenco di standard?

  • man builtinsfornisce un elenco di comandi. Questi sono gli unici comandi che posso usare in uno script di shell portatile che funziona in tutte le shell?
  • Un built-in può essere specifico per la shell?
  • Gli standard per Linux differiscono da quelli di altri Unix?
  • Che dire della sintassi? La punteggiatura, gli operatori, ecc. Possono essere diversi in alcune shell?

Risposte:


12

Greg's Wiki ha pubblicato un post sull'adattamento degli script bash per Dash che sottolinea molti "bashismi" - funzionalità extra che non sono standard ma fanno parte di bash. Evitare questi bashismi può aiutare a rendere la tua sceneggiatura più amichevole per ambienti diversi. Ciò risponde in particolare ad alcune delle tue domande. Ad esempio, sì, ci sono operatori che differiscono (come ==), ma ci sono un set Posix standard che dovrebbe funzionare in tutti gli ambienti.

Per una lettura più approfondita, è possibile verificare lo standard Posix , a cui tutte le shell devono essere conformi. In particolare, il volume su "Shell & Utilities".

Ciò che trovo più impegnativo delle differenze della shell sono le differenze di comando. Molti sistemi Linux hanno GNU find, ma se stai scrivendo uno script portatile, non fare affidamento sul tuo man find, perché ci sono molti sistemi là fuori con BSD find, che ha un set di funzionalità diverso. Se stai scrivendo script per busybox, scoprirai che esistono versioni diverse con messaggi completamente diversi nc. Questi sono i tipi di cose che mi danno sempre quando distribuisco una sceneggiatura in ambienti diversi.

Per una lettura extra sulle buone pratiche di scripting della shell, c'è anche una buona risorsa sul blog di David Pashley: Scrivere script di shell Bash robusti

Inoltre, assicurati di leggere le risposte e i commenti di Gilles su questo sito. Ha molti suggerimenti su come assicurarsi di utilizzare il codice portatile.


5

Scrivere uno script di shell in una shell specifica significa avere quella shell installata. L'unico standard è avere cshe shinstallare su tutte le varianti Unix. Quindi, se vuoi che il tuo script venga eseguito su Solaris, * BSD e GNU, allora dovresti scriverlo, diciamo, nella shell Bourne.

Tuttavia, la maggior parte dei comandi Unix hanno sintassi diverse in diverse implementazioni - guarda in psSolaris, FreeBSD e GNU - quindi, a seconda degli strumenti che usi, il tuo script potrebbe non essere portatile comunque. Anche dove è installata la shell sarà importante. E ' /bin/bash /usr/bin/bash, /usr/local/bin/basho da qualche altra parte?

Non sono a conoscenza degli standard che definiscono una shell. Dai un'occhiata a rc o http:// 192.220.96.201 /es/es-usenix-winter93.html`"> per le bizzarre shell non standard, ma quelle sembrano comunque essere conformi ad alcune idee comuni.


7
POSIX definisce sh.
Casuale 832,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.