Éviter les «BASH-isms» dans les scripts shell

37

Existe-t-il un outil similaire à Perl :: Critic qui inspectera vos scripts shell et signalera les failles, les problèmes de portabilité, l’utilisation de programmes non standard sans solutions de secours, l’utilisation de programmes dépréciés, etc.?

Je sais que set -o posixcela désactivera l'utilisation non-POSIX, mais cela ne me dira pas ce que je veux savoir, comme les tableaux de shell d'indexation zsh commençant à 1 et bash, à partir de 0, et les cendres ne supportant pas du tout les tableaux.

amphétamachine
la source

Réponses:

36

Il y a des checkbashismes . Sur Debian, il est livré avec les outils de maintenance du paquet .

Testez vos scripts sous tiret et posh . Les deux ont quelques constructions non POSIX, mais si votre script fonctionne dans les deux cas, il fonctionnera probablement dans la plupart des endroits. (Avec l'avertissement, il est difficile de tester les scripts shell typiques car ils ont souvent beaucoup de cas.)

Si vous souhaitez que vos scripts soient portables sur les plates-formes Linux intégrées, testez-les avec BusyBox . Notez que BusyBox peut être plus ou moins restreint, selon la taille du système intégré que vous souhaitez. Il est tout à fait normal que les scripts reposent sur une fonctionnalité que certaines installations BusyBox ne possèdent pas.

Notez que la non-portabilité ne provient pas uniquement du shell, elle provient également d’utilitaires externes. OpenBSD et Solaris ont tendance à avoir des utilitaires avec des fonctionnalités POSIX et pas beaucoup plus, donc ils sont bons pour tester la portabilité.

Vous voudrez faire référence à la spécification POSIX et aux autres ressources mentionnées dans ce fil (en particulier le manuel autoconf ); mais c'est de la documentation, ça n'aide pas si vous utilisez une fonctionnalité accidentellement.

Gilles, arrête de faire le mal
la source