Kann jemand diese Tools in die richtige Reihenfolge bringen? Welche davon ist sicher auf selbst die minimalsten * nix - Systemen gefunden werden? Ist einer von ihnen zu 100% sicher anwesend? Ich vermute, dass die Reihenfolge wie folgt lautet:
- awk
- sed
- Sch
- perl
Ich stelle mir zwar vor, dass es Systeme gibt, die nicht standardmäßig eine Bourne-Shell verwenden, aber eine Shell wird standardmäßig vorhanden sein. Wird das immer so sein /bin/sh
? Vermutlich nicht, wenn es sich nicht um eine Borowski-Shell handelt. Beide awk
und sed
haben Seiten, die sie in der POSIX-Spezifikation erläutern, sodass sie vermutlich immer vorhanden sein werden. Ist das so? Kann ich sicher sein , dass beide auf einem * nix installiert werden? Einschließlich eingebetteter Systeme?
posix
portability
terdon
quelle
quelle
sh
,awk
undsed
mein busybox-basiertes NAS hat beispielsweise auch Perl.Antworten:
sed
,sh
undawk
sind portabel, da sie von POSIX spezifiziert werden , und werdenperl
nicht von einem Standard unterstützt.Wenn Sie sich an kompatiblen Code halten, sollte für die drei POSIX-Befehle keine Reihenfolge der Portabilität festgelegt sein.
Die drei POSIX-Programme und viele andere Dienstprogramme sind für ein POSIX-Betriebssystem obligatorisch. Einige Betriebssysteme fehlen aufgrund von Minimierung oder Bereitstellung unvollständiger / nicht konformer Implementierungen.
Tatsächlich würden die meisten (wenn nicht alle) kostenlosen und Open-Source-Unix-ähnlichen Betriebssysteme den Konformitätsprozess wahrscheinlich nicht bestehen, sollten sie es versuchen, und sie versuchen es sowieso nie.
Es würde mich überraschen, ein Betriebssystem wie * nix zu finden, dem eine Bourne-Shell auf Syntaxbasis fehlt, aber alles ist möglich, insbesondere bei eingebetteten Systemen.
/bin/sh
Es handelt sich wahrscheinlich um eine Shell der Bourne-Syntaxfamilie, es kann jedoch nicht garantiert werden, dass sie POSIX-kompatibel ist, auch nicht in POSIX-kompatiblen Systemen. Zum Beispiel ist es/usr/xpg4/bin/sh
unter Solaris 10 und älter, während/bin/sh
es sich um die ältere Original-Bourne-Shell handelt, die nicht POSIX ist.quelle
Nehmen Sie einen Hinweis aus den Autotools: Halten Sie sich an den kleinsten gemeinsamen Nenner der Bourne- und POSIX-Shell - möglicherweise ergänzt durch
sed
-, wenn Sie etwas schreiben müssen, das überall funktionieren muss . Es kann Systeme geben, in denen etwas kaputt geht, aber Sie können solche Probleme umgehen, indem Sie sie neu schreiben.Beispielsweise haben einige alte Systeme Probleme mit Erweiterungsfehlern
test
, auch bekannt als[
:so ist die Autoconf Praxis neu zu schreiben , in doppelten Anführungszeichen mit einem einzelnen Zeichen - Präfix, etwa so:
Sie könnten auch
"x$foo"
hier verwenden. Dies schützt vor der Möglichkeit,$foo
dass eine gültige Option für den Ausdruck sein könntetest(1)
, und da dies[
ein Alias fürtest
ihn ist, könnte sie ihn falsch interpretieren. Die Lösung besteht darin, eine Situation einzurichten, in der das unbekannte Argument[
immer mit beginntx
, was bedeutet, dass es keine besondere Bedeutung haben kann[
.(Autoconf empfiehlt auch die Verwendung von
test
anstelle von[
, aber dieser Rat kommt als Reaktion auf mögliche Konflikte mit M4 zustande , das auch[
in seiner Syntax verwendet wird.)awk ist POSIX und daher theoretisch überall verfügbar. Es ist sogar in Busybox enthalten , sodass Sie
awk
auch in einigen sehr restriktiven eingebetteten Linux-Systemen eine Implementierung haben . Dennoch wäre ich weniger überrascht, wenn ich auf ein System ohneawk
als stoßen würdesed
. Ich nehme an, es kommt auf die Komplexität an: Einfachere Werkzeuge überstehen mit größerer Wahrscheinlichkeit die aggressive Triage.Perl ist kein Bestandteil eines weit verbreiteten Standards, weder POSIX noch eines anderen. Sie können sich also einfach nicht darauf verlassen, wenn Sie im Voraus nichts über die Zielumgebung wissen. Perl ist nicht standardmäßig installiert in:
Das Autoconf-Handbuch enthält ein Kapitel zur portablen Shell-Programmierung, das Ihnen hilfreich sein sollte. Die letzten Abschnitt behandelt Werkzeuge wie
sed
,awk
und viele andere.quelle
sh
undsed
sind am tragbarsten. OK, was ist mit den anderen? Und ist dassh
wirklich tragbar? Was ist, wenn die Standard-Shell ein C-Shell-Derivat ist? Wird ein solches System noch einen Symlink haben/bin/sh
?sed
undawk
werden von busybox zur Verfügung gestellt, warum würden Sie mehr überrascht sein, wenn Siesed
abwesend sind? Haben Sie eine Idee, ob Busybox-Alternativen auch sed und awk bereitstellen?sed
Tut weniger, daher ist seine Binärdatei kleiner, weshalb es weniger Gründe gibt, sie zu entfernen alsawk
, was ziemlich komplex ist. (20 kB vs 48 kB auf meinem System.) Re: Busybox-Alternativen , ich kenne keine andere One-Stop-Shopping-Alternative.sh
Annahme einverstanden bin (dass der kleinste gemeinsame Nenner eine Art von - seltsamem - Terdon-Rangawk
undsed
darüber o_O ist?), Obwohl dies nur mit den Zwecken von Autotool zusammenfällt, da einige Umgebungen, insbesondere kleine, kann nicht für den Bau bestimmt sein, Zeitraum./bin/sh
, dann sind die Dinge anders, aber ich wusste nicht , dass alle eine haben würden. Es tut mir leid, dass ich das im Übrigen nicht akzeptiert habe. Ich war zwischen den Antworten von dir und jlliagre hin und her gerissen. Beide haben meine Frage beantwortet. Ich habe seine gewählt, weil sie direkter angesprochen wurde und weil er weniger Repräsentanten hat :).