Les scripts dash, ash et sh sont-ils 100% compatibles?

16

Je voulais savoir si les scripts écrits pour dash, ash et sh sont 100% compatibles?

Y a-t-il des fonctionnalités ajoutées à dash ou ash, ou un changement de syntaxe?

D'après ce que j'ai entendu, le frêne est un descendant direct de sh.

user1115057
la source
le frêne est une forme de bash rayée
Joe
4
La source? Je n'ai rien vu qui dise que ash est lié à bash
user1115057
Pourquoi les gens ne soumettraient-ils pas simplement des correctifs à bash au lieu de créer toutes sortes de coquilles, ce qui me bouleverse tout le temps. Si vous voulez vraiment savoir, lisez le manuel, par exempleman ash
daisy
2
Exact, ce n'est pas un descendant de bash. Il serait plus précis de dire qu'ils descendent de sh (le shell Bourne d'origine), mais ce n'est pas tout à fait correct non plus.
Zlatko
Vous pouvez utiliser l'utilitaire checkbashismspour tester que votre script est compatible POSIX.
donothingsuccess

Réponses:

18

La réponse courte est non, ils ne sont pas 100% compatibles.

Mais la plupart des shells sont assez proches de la base, vous ne rencontrerez donc 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 comme la tabulation et similaires.

C'est aussi une dashsorte de descendant de ash- ou de port de BSD à Linux, pour être précis. Et tous doivent être des descendants ou des implémentations différentes de sh. En fait, shest sur la plupart des systèmes juste un lien symbolique vers bash, dashou autre chose. Ce qui importe, c'est la conformité POSIX - et lorsque vous écrivez des scripts conformément aux normes, vous ne rencontrerez aucun problème.

La différence entre ces shells réside dans les optimisations et les performances. Ils sont alors moins riches en fonctionnalités bash, mais ce sont des coquilles pleinement légitimes. Bash est riche en fonctionnalités pour le travail interactif, mais utilise plus de mémoire, par exemple.

Zlatko
la source
Mais pour l'utilisation des scripts, ils sont compatibles?
user1115057
Et à propos de la conformité POSIX, même si je respecte cette norme, si un script est écrit pour Bash, je ne pense pas qu'il fonctionnera sur n'importe quel sh ou son descendant
user1115057
Ils doivent être compatibles les uns avec les autres si vous n'utilisez pas certaines fonctionnalités obscures. Mais si vous utilisez le script bash, vous risquez de rencontrer plus de problèmes.
Zlatko
jamais prévu d'utiliser bash avec sh ou ash ou dash. Quelles sont ces fonctionnalités obscures?
user1115057
1
de nombreuses fonctionnalités plus récentes de bash sont des ajouts sur POSIX, il est donc de plus en plus probable que vous écriviez du code non portable si vous les utilisez. IIRC même la construction [[]] n'est pas en sh. Attention également, si vous n'écrivez pas un script shell pur, des différences d'outils interviennent également (différentes versions de sed, grep, awk ...).
lynxlynxlynx
1

Il convient de mentionner que sur certains systèmes, notamment Debian, / bin / ash n'est pas disponible:

$ type ash dash
bash: type: ash: not found
dash is /bin/dash
Steven Penny
la source
2
Ils pourraient avoir de la cendre occupée.
muru