In Anbetracht der Tatsache, dass POSIX einem gemeinsamen Standard unter allen Unices am nächsten kommt, möchte ich wissen, ob es eine Shell gibt, die es ausschließlich unterstützt. Während die meisten modernen Shells POSIX unterstützen (und POSIX-kompatible Skripte problemlos ausführen), können sie nicht gut auf nicht kompatible Funktionen hinweisen.
Gibt es eine Shell, die nur POSIX und POSIX so implementiert, dass bei nicht kompatiblen Funktionen ein Fehler ausgegeben wird?
BEARBEITEN Ich möchte klarstellen, dass ich nicht nach allgemeinen Tipps zum Schreiben von portablen Shell-Skripten frage. Die entsprechende Frage, die in den Kommentaren erwähnt wurde, deckte dies bereits ab. Ich dachte an diese Frage, als ich herausfand, dass bash
es eine --posix
Option gibt, aber nur um herauszufinden, dass sie nur einige Initialisierungsverhalten betrifft, was nicht genau das ist, wonach ich suche.
quelle
dash
. Ich erwähnte Portabilität als allgemeinen Kontext für meine Frage, aber das war nicht die wahre Absicht.Antworten:
Leider ist 'portabel' für Shellskripte in der Regel eine höhere Anforderung als 'POSIX-konform'. Das heißt, etwas zu schreiben, das auf einer POSIX-Shell läuft, ist nicht allzu schwierig, aber es ist schwieriger, es auf einer echten Shell laufen zu lassen.
Sie können damit beginnen, jede Shell in Ihrem Paketmanager zu installieren, insbesondere Debians
posh
Sounds, die Ihren Wünschen entsprechen (Policy-konforme Ordinary SHell). Debians Richtlinie ist POSIX mit wenigen Ausnahmen (echo -n
angegeben,local
...).Darüber hinaus müssen einige Shells (insbesondere / bin / sh) auf verschiedenen Plattformen getestet werden. Ich teste auf Solaris (/ bin / sh und xpg4 / sh) und BSD. AIX und HP-UX sind sehr kompatibel und verursachen keine Probleme. Bash ist eine kleine Welt für sich.
Ich würde den Autoconf-Leitfaden für tragbare Shell empfehlen , der absolut brillant ist und viel Zeit spart. Große Teile davon sind veraltet, aber das ist in Ordnung. überspringe einfach TruUnix und Ultrix und so weiter, wenn es dir egal ist!
quelle
posh
klingt in der Tat wie das, wonach ich bitte. Ich werde einige Tests machen, sobald ich kann.Sie können ShellCheck (GitHub) als Linter für Ihre Shell-Skripte verwenden. Es gibt auch eine Online-Version .
Um POSIX-Kompatibilitätsprobleme zu erkennen (z. B. SC2039 ), sollte die shebang-Zeile Ihres Shell-Skripts lauten
#!/bin/sh
. Sie können auch--shell=sh
an übergebenshellcheck
.Beispiel (
test.sh
):Ergebnis (
shellcheck test.sh
):quelle
Bash wird im POSIX-kompatiblen Modus ausgeführt, wenn die
POSIXLY_CORRECT
Umgebungsvariable festgelegt ist. Aus der Manpage:Viele andere GNU-Dienstprogramme werden ebenfalls berücksichtigt
POSIXLY_CORRECT
. Wenn Sie also auf einem System mit überwiegend GNU-Tools (z. B. den meisten Linux-Systemen) arbeiten, ist dies ein guter Anfang, wenn Sie POSIX-Konformität anstreben.quelle
[[
.