Quelqu'un peut-il mettre ces outils par ordre de portabilité? Lequel de ces certains se trouvent même sur les systèmes les plus nix minimal de *? L'un d'eux est-il sûr à 100% d'être présent? Je suppose que la commande est la suivante:
- awk
- sed
- sh
- perl
Bien que j'imagine qu'il existe des systèmes qui ne sont pas définis par défaut sur un shell bourne, certains shell seront présents par défaut, est-ce toujours le cas /bin/sh
? Vraisemblablement pas si ce n'est pas un obus de type bourne. Les deux awk
et sed
ont des pages les expliquant sur la spécification POSIX, donc ils seront probablement toujours présents. Est-ce vrai? Puis-je être sûr que les deux seront installés sur n'importe quel * nix? Y compris les systèmes embarqués?
posix
portability
terdon
la source
la source
sh
,awk
etsed
par exemple et mon NAS basé sur busybox a également perl.Réponses:
sed
,sh
etawk
sont portables étant spécifié par POSIX,perl
n'est pas comme n'étant pas soutenu par une norme.Si vous vous en tenez au code conforme, il ne devrait y avoir aucun ordre de portabilité pour les trois commandes POSIX.
Les trois POSIX ainsi que de nombreux autres utilitaires sont obligatoires pour qu'un OS soit POSIX. Il existe cependant des systèmes d'exploitation qui en manquent en raison de la minimisation ou qui fournissent des implémentations incomplètes / non conformes.
En fait, la plupart (sinon la totalité) des systèmes d'exploitation Unix gratuits et open source, comme ceux d'Unix, ne passeraient probablement pas le processus de conformité s'ils essayaient, et ils n'essaient jamais de toute façon.
Je serais surpris de trouver un * nix comme OS sans shell basé sur la syntaxe Bourne, mais tout est possible, surtout avec les systèmes embarqués.
/bin/sh
est probablement un shell de la famille de syntaxe Bourne, mais il n'est pas garanti qu'il soit compatible POSIX, même en systèmes conformes POSIX. Par exemple, il se trouve/usr/xpg4/bin/sh
sur Solaris 10 et les versions antérieures, tandis que/bin/sh
le shell Bourne d'origine hérité n'est pas POSIX.la source
Inspirez-vous des Autotools: respectez le plus petit dénominateur commun de Bourne et du shell POSIX - éventuellement augmenté de
sed
- si vous devez écrire quelque chose qui doit fonctionner partout . Il peut exister des systèmes où quelque chose se casse, mais vous pouvez contourner ces problèmes en réécrivant.Par exemple, certains systèmes anciens ont des problèmes avec des erreurs d'extension dans
test
, alias[
:donc la pratique Autoconf est de le réécrire entre guillemets avec un préfixe de caractère unique, comme ceci:
Vous pouvez également utiliser
"x$foo"
ici. Cela protège contre la possibilité qui$foo
pourrait être une option valide pourtest(1)
, et comme[
c'est un alias pourtest
, cela pourrait mal interpréter l'expression. La solution est de mettre en place une situation où l'argument inconnu[
commence toujours parx
, ce qui signifie qu'il ne peut pas avoir de signification particulière pour[
.(Autoconf recommande également d'utiliser à la
test
place de[
, mais cet avis survient en réaction à d'éventuels conflits avec M4 , qui utilise également[
dans sa syntaxe.)awk est POSIX , donc théoriquement il est disponible partout. C'est même dans Busybox , donc vous aurez une
awk
implémentation même dans certains systèmes Linux embarqués très restrictifs. Pourtant, je serais moins surpris de tomber sur un système sansawk
quesed
. Je suppose que cela se résume à la complexité: des outils plus simples sont plus susceptibles de survivre à un triage agressif.Perl ne fait partie d'aucune norme répandue, POSIX ou autre, vous ne pouvez donc pas compter dessus si vous ne savez rien à l'avance sur l'environnement cible. Perl n'est pas installé par défaut dans:
Le manuel Autoconf contient un chapitre sur la programmation de shell portable qui devrait vous être utile. La dernière section couvre des outils comme
sed
,awk
et bien d' autres.la source
sh
et cesed
sont les plus portables. OK, qu'en est-il des autres? Et est-cesh
vraiment portable? Et si le shell par défaut est un dérivé du shell C? Un tel système aura-t-il toujours un lien symbolique sur/bin/sh
?sed
etawk
sont fournis par busybox, pourquoi seriez-vous plus surpris de voussed
absenter? Avez-vous une idée si les alternatives à busybox fournissent également sed et awk?sed
fait moins, donc son binaire sera plus petit, donc il y a moins de raisons de le supprimer queawk
, ce qui est assez complexe. (20 Ko contre 48 Ko sur mon système.) Re: alternatives Busybox , je ne connais aucune autre alternative à guichet unique.sh
- étrange que terdon se classeawk
etsed
au-dessus de cet o_O?), Bien que ce ne soit qu'une coïncidence avec les objectifs d'Autotool, car certains environnements, en particulier les plus petits, peut ne pas être destiné à la construction, point final./bin/sh
, alors les choses sont différentes mais je ne savais pas que tous en auraient un. Désolé de ne pas avoir accepté cela au fait, j'étais partagé entre les réponses de la vôtre et celles de jlliagre qui ont toutes deux répondu à ma question. J'ai choisi le sien car il le traitait plus directement et parce qu'il a moins de rep :).