Come dichiarato, bash
è comunemente disponibile nell'installazione predefinita per molte distro. Il tuo script non raggiungerà la più grande base di utenti facendo affidamento su zsh
.
Una domanda importante a cui rispondere prima di progettare la tua sceneggiatura è " Perché è importante in quale shell viene eseguita una sceneggiatura? "
Diverse shell utilizzano sintassi diverse o offrono funzioni di shell aggiuntive che potrebbero non essere supportate da altre shell. Per scrivere uno script per il "mondo generale degli utenti finali linux", determinare se lo script utilizza qualsiasi sintassi o funzioni shell che si basano su un particolare ambiente shell.
Ad esempio, la bash
shell supporta determinate espansioni che non sono supportate da dash
Bourne shell o da qualsiasi altro /bin/sh
punto sul sistema dell'utente.
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash
Prova a eseguire echo {1..10}
con/bin/sh
rispetto a /bin/bash
e otterrai un output molto diverso.
Lo stesso vale per il zsh
quale, pur supportando la maggior parte della bash
sintassi, offre ulteriore espansione e sintassi che non è supportata dalla bash
shell. Guarda questo tabelle confrontando le shell per esempi specifici.
Potresti ampliare la tua potenziale base di utenti oltre bash
aderendo agli script che funzionano quando vengono chiamati #!/bin/sh -u
. Tuttavia, ciò pone un'altra importante domanda da porsi: " Che cosa viene sacrificato in cambio di una maggiore portabilità? "
Determina se le differenze relative a problemi di sicurezza, funzionalità, efficienza o qualsiasi altra cosa che ritieni sia una priorità per la tua sceneggiatura varrebbero il sacrificio. Potrebbe non essere necessario un uso diffuso di uno script con una vulnerabilità di sicurezza nota solo perché funziona in più ambienti.
Così molti script sono scritti per bash
quel supporto per questi script viene utilizzato come criterio quando si confrontano le shell dei comandi . Molte più persone saranno in grado di eseguire il tuo script che se si basa su zsh
qualsiasi altra sintassi esclusiva di un ambiente shell.
Inoltre, tieni presente che alla fine non hai il controllo su come l'utente esegue lo script (utile anche per il debug degli script in diverse shell ):
Ricorda che se usi una shell per leggere uno script di shell ("sh scriptname"), invece di eseguirlo direttamente ("./scriptname"), la shell tratterà tutti i commenti all'inizio dello script di shell come commenti. In particolare, il commento che specifica l'interprete da utilizzare durante l'esecuzione dello script (“#! / Bin / sh -u”) verrà ignorato, così come tutte le opzioni elencate accanto a quell'interprete.
Quindi, il meglio che puoi fare al riguardo è rendere portatili i tuoi script, fintanto che non ci sono grandi sacrifici su come funziona.
Potresti anche vedere le convenzioni di codifica Bash - StackTranslate.it .
zsh
possono essere popolari, mentre in altri (settore bancario) è praticamente inaudito. Penso che dovresti dare molte più informazioni se hai bisogno di consigli adeguati su questo.