Je voulais savoir si les scripts écrits pour dash, ash et sh sont 100% compatibles?
Y a-t-il des fonctionnalités supplémentaires à tiret ou ash, ou changement de syntaxe?
Daprès ce que jai entendu, ash est un descendant direct de sh.
Commentaires
Réponse
La réponse courte est non, ils « nest pas 100% compatible.
Mais la plupart des shells sont assez proches de la base, donc vous ne rencontreriez que rarement des incohérences. En fait, la plupart des shells ne diffèrent pas beaucoup par la syntaxe ajoutée, mais par certaines fonctionnalités supplémentaires telles que la complétion par tabulation et autres.
De plus, dash
est en quelque sorte un descendant de ash
— ou port de BSD vers Linux, pour être précis. Et tous doivent être des descendants ou des implémentations différentes de sh
. En fait, sh
est sur la plupart des systèmes juste un lien symbolique vers bash
, dash
ou autre chose. Ce qui compte, cest la conformité POSIX — et lorsque vous écrivez des scripts selon les standards, vous ne rencontrez pas de problèmes.
La différence entre ces shells réside dans les optimisations et performances. Ils « sont moins riches en fonctionnalités que bash
, mais ce sont des shells tout à fait légitimes. Bash est riche en fonctionnalités pour le travail interactif, mais utilise plus de mémoire, par exemple.
Commentaires
- Mais pour lutilisation des scripts, ils sont compatibles?
- Et à propos de la conformité POSIX, même si je suis ce standard, si un script est écrit pour Bash, je ne pense pas quil fonctionnera sur nimporte quel sh ou son descendant
- Ils devraient être compatibles les uns avec les autres si vous ' nutilisez pas certaines fonctionnalités obscures. Mais si vous utilisez un script bash, vous risquez de rencontrer dautres problèmes.
- na jamais eu lintention dutiliser bash avec sh, ash ou dash. Quelles sont ces fonctionnalités obscures?
- De nombreuses fonctionnalités plus récentes de bash ' sont des ajouts par rapport à POSIX, il est donc de plus en plus probable que vous écririez du code non portable si vous ' les utilise. IIRC, même la construction [[]] nest pas dans sh. Attention également, si vous ' nécrivez pas un script shell pur, des différences doutils entrent également en jeu (différentes versions de sed, grep, awk …).
Réponse
Il faut mentionner que sur certains systèmes, notamment Debian, / bin / ash nest pas disponible:
$ type ash dash bash: type: ash: not found dash is /bin/dash
Commentaires
- Ils peuvent avoir des cendres occupées.
- Cela dit, il existe de nombreux systèmes qui ' nont pas
bash
non plus.
man ash
checkbashisms
pour tester que votre script est compatible POSIX.