Considérant que POSIX est la chose la plus proche d'un standard commun à tous les ordinateurs, je voudrais savoir s'il existe un shell qui le prend en charge exclusivement. Bien que la plupart des shells modernes prennent en charge POSIX (et exécutent les scripts compatibles POSIX sans aucun problème), ils ne font pas un bon travail pour signaler les fonctionnalités non conformes.
Existe-t-il un shell qui n'implémente que POSIX et POSIX, de manière à générer une erreur pour toute fonctionnalité non conforme?
EDIT Je tiens à préciser que je ne demande pas de conseils généraux pour écrire des scripts shell portables. La question connexe mentionnée dans les commentaires couvrait déjà cela. J'ai pensé à cette question quand j'ai découvert qu'il y bash
avait une --posix
option, mais seulement pour découvrir que cela n'affecte que certains comportements d'initialisation, ce qui n'est pas exactement ce que je recherche.
la source
dash
. J'ai mentionné la transférabilité comme contexte général de ma question, mais ce n'était pas sa véritable intention.Réponses:
Malheureusement, "portable" est généralement une exigence plus stricte que "compatible POSIX" pour les scripts shell. C'est-à-dire qu'écrire quelque chose qui tourne sur n'importe quel shell POSIX n'est pas trop difficile, mais le faire tourner sur n'importe quel shell réel est plus difficile.
Vous pouvez commencer par installer chaque shell de votre gestionnaire de paquets, en particulier les
posh
sons de debian ressemblant à ce que vous voulez ( shell ordinaire conforme à la politique). La politique de Debian est POSIX à quelques exceptions près (echo -n
spécifié,local
...).Au-delà de cela, les tests doivent couvrir quelques shell (en particulier / bin / sh) sur diverses plates-formes. Je teste sur Solaris (/ bin / sh et xpg4 / sh) et BSD. AIX et HP-UX sont très compatibles et ne posent aucun problème. bash est un petit monde à part.
Je recommanderais le guide Autoconf sur les coques portables , qui sont absolument géniaux et permettent de gagner beaucoup de temps. De gros morceaux sont obsolètes, mais ce n'est pas grave; sautez TruUnix et Ultrix et ainsi de suite si vous ne vous en souciez pas!
la source
posh
sonne en effet ce que je demande. Je vais faire des tests dès que je peux.Vous pouvez utiliser ShellCheck (GitHub) en tant que linter pour vos scripts de shell. Il existe également une version en ligne .
Pour détecter les problèmes de compatibilité POSIX (par exemple, SC2039 ), la ligne shebang de votre script shell doit être
#!/bin/sh
. Vous pouvez également passer--shell=sh
àshellcheck
.Exemple (
test.sh
):Résultat (
shellcheck test.sh
):la source
Bash s'exécutera en mode compatible POSIX si la
POSIXLY_CORRECT
variable d'environnement est définie. De la page de manuel:De nombreux autres utilitaires GNU seront également honorés
POSIXLY_CORRECT
. Ainsi, si vous utilisez un système avec principalement des outils GNU (comme la plupart des systèmes Linux), ceci est un bon début si votre objectif est la conformité POSIX.la source
[[
.