Evitare "BASH-isms" negli script di shell


37

Esiste uno strumento simile a Perl :: Critic che ispezionerà gli script della shell e indicherà difetti, problemi di portabilità, usi di programmi non standard senza fallback, usi del programma ammortizzati, ecc.?

Mi rendo conto che set -o posixdisabiliterà l'utilizzo non POSIX, ma che non mi dirà cose che voglio sapere, come zsh che indicizza array di shell a partire da 1 e bash, da 0, e ash non supporta affatto gli array.

Risposte:


36

Ci sono checkbashisms . Su Debian, viene fornito come parte degli strumenti di manutenzione dei pacchetti .

Metti alla prova i tuoi script sotto trattino e elegante . Entrambi hanno alcuni costrutti non POSIX, ma se lo script funziona in entrambi, è probabile che funzioni nella maggior parte dei luoghi. (Con l'avvertenza che è difficile testare tipici script di shell in quanto tendono ad avere molti casi angolari.)

Se intendi che i tuoi script siano portabili su piattaforme Linux integrate, testali con BusyBox . Si noti che BusyBox può essere più o meno limitato, a seconda della dimensione desiderata di un sistema incorporato; è abbastanza normale avere degli script che si basano su una funzionalità che alcune installazioni di BusyBox non hanno.

Si noti che la non portabilità non proviene solo dalla shell, ma proviene anche da utility esterne. OpenBSD e Solaris tendono ad avere utility con funzionalità POSIX e non molto altro, quindi sono buone per i test di portabilità.

Ti consigliamo di fare riferimento alla specifica POSIX e ad altre risorse menzionate in questo thread (in particolare il manuale di autoconf ); ma questa è documentazione, non aiuta se si utilizza una funzione per errore.

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.