Vérifier portabilité script sh Le sujet est résolu

Tout ce qui concerne la programmation.
Répondre
Avatar de l’utilisateur
Dunatotatos
Membre
Membre
Messages : 425
Inscription : 11 mai 2016, 20:56
Status : Hors-ligne

Salut à tous,

Je cherche un moyen simple et rapide de tester la portabilité d'un script sur différentes implémentations de sh. L'idéal serait une analyse syntaxique sans exécution du script (utile pour les scripts à exécution longue !). Un "simple" respect des normes POSIX ne suffit évidemment pas à être portable...
J'ai bien conscience qu'une simple analyse syntaxique ne vérifiera pas l'entière portabilité (possibilité d'exécution différente selon l'implémentation), mais ce serait une bonne base.

Connaissez-vous un outil de ce type ?

Merci d'avance
Duna
Avatar de l’utilisateur
Dunatotatos
Membre
Membre
Messages : 425
Inscription : 11 mai 2016, 20:56
Status : Hors-ligne

Bon, je réponds assez vite à moi-même, mais j'ai trouvé un outil vraiment sympa !
http://www.shellcheck.net/
Avatar de l’utilisateur
PengouinPdt
Contributeur
Contributeur
Messages : 1343
Inscription : 23 avr. 2016, 23:37
Localisation : 47/FR
Diaspora* : https://framasphere.org/u/hucste
Contact :
Status : Hors-ligne

oui, est qui est dispo, normalement dans en tant que package dans ta distro préférée ! :p

(du moins en Sid)
PengouinPdt { le seul, le vrai } ~ " Libre as a Pengouin "
- DIY - Debian Sid | Devuan Ceres
----
Ne réponds pas aux PM d'assistance
Avatar de l’utilisateur
Dunatotatos
Membre
Membre
Messages : 425
Inscription : 11 mai 2016, 20:56
Status : Hors-ligne

En effet. Testé en local, ça marche plutôt bien !

Et mes scripts ne sont pas si portables que ça...
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Bonjour Dunatotatos

Si ça peut t'être utile :

- La documentation concernant POSIX http://pubs.opengroup.org/onlinepubs/9699919799/

- Le mode POSIX de bash (en utilisant l'option --posix) https://tiswww.case.edu/php/chet/bash/POSIX

=======

Code : Tout sélectionner

michel@debg53sw:~$ file $(which sh)
/bin/sh: symbolic link to dash
[quote="extrait de "man dash""]…
DESCRIPTION
       dash is the standard command interpreter for the system. The current version of dash is in the process of being changed to conform
       with the POSIX 1003.2 and 1003.2a specifications for the shell. This version has many features which make it appear similar in
       some respects to the Korn shell, but it is not a Korn shell clone (see ksh(1)). Only features designated by POSIX, plus a few
       Berkeley extensions, are being incorporated into this shell. This man page is not intended to be a tutorial or a complete specifi‐
       cation of the shell.
…[/quote]
Avatar de l’utilisateur
Dunatotatos
Membre
Membre
Messages : 425
Inscription : 11 mai 2016, 20:56
Status : Hors-ligne

Merci MicP pour ces précisions.

Au passage, je recommande très chaudement shellcheck. Il ne vérifie pas seulement la compatibilité avec sh, mais avec l'interpréteur indiqué par le shebang. Utile pour du bash aussi, donc.
En plus, shellcheck ne fait pas que vérifier la compatibilité (chose assez facile à faire si on a un interpréteur avec lequel on veut vérifier cette compatibilité), mais avertit aussi de certaines étourderies comme des guillemets oubliés autour de l'utilisation d'une variable, ou des variables déclarées mais non utilisées. Un véritable analyseur syntaxique comme on peut en trouver dans les IDE.
En plus, les recommandations sont recensées sur le dépôt github, avec des explications sur l'origine de l'erreur et comment la corriger.

Un exemple :

Code : Tout sélectionner

$ shellcheck finish.sh 

In finish.sh line 21:
printf "Your job is completed : $1" | mail -s "Job completed" you@example.com
       ^-- SC2059: Don't use variables in the printf format string. Use printf "..%s.." "$foo".
Et quand on va sur la page associée à l'erreur, on obtient des explications détaillées :
https://github.com/koalaman/shellcheck/wiki/SC2059

Chapeau bas aux créateurs de cet outil !
Répondre