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.


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.


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

2
Ils pourraient avoir de la cendre occupée.
muru
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.