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
Vérifier portabilité script sh Le sujet est résolu
- Dunatotatos
- Membre
- Messages : 426
- 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/
http://www.shellcheck.net/
- PengouinPdt
- 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)
(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
- DIY - Debian Sid | Devuan Ceres
----
Ne réponds pas aux PM d'assistance
- Dunatotatos
- Membre
- Messages : 426
- 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...
Et mes scripts ne sont pas si portables que ça...
-
- 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
=======
[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]
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
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]
- Dunatotatos
- Membre
- Messages : 426
- 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 :
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 !
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".
https://github.com/koalaman/shellcheck/wiki/SC2059
Chapeau bas aux créateurs de cet outil !