Sind Dash-, Ash- und Sh-Skript zu 100% kompatibel?

Ich wollte wissen, ob Skripte, die für dash, ash und sh geschrieben wurden, zu 100% kompatibel sind?

Gibt es zusätzliche Funktionen? Bindestrich oder Asche oder Syntaxänderung?

Nach dem, was ich gehört habe, ist Asche ein direkter Nachkomme von sh.

Kommentare

  • Asche ist eine gestreifte Form von Bash
  • Quelle? Ich habe nichts gesehen, was besagt, dass Asche mit Bash zusammenhängt.
  • Warum sollten ' nicht einfach Patches an Bash senden, anstatt alle Arten von Muscheln zu erstellen, was mich verblüfft die ganze Zeit. Wenn Sie es wirklich wissen möchten, lesen Sie das Handbuch, z. B. man ash
  • Richtig, ' stammt nicht von ab Bash. Es wäre genauer zu sagen, dass sie ' von sh (der ursprünglichen Bourne-Shell) abstammen, aber dass ' auch nicht vollständig korrekt ist
  • Sie können das Dienstprogramm checkbashisms verwenden, um zu testen, ob Ihr Skript POSIX-kompatibel ist.

Antwort

Die kurze Antwort lautet nein, sie „sind nicht 100% kompatibel.

Aber die meisten Shells sind ziemlich nah an der Basis, so dass Sie nur selten auf Inkonsistenzen stoßen würden. Die meisten Shells unterscheiden sich nicht wesentlich durch die hinzugefügte Syntax, sondern durch einige zusätzliche Funktionen wie Tab-Vervollständigung und ähnliches.

dash ist eine Art Nachkomme von ash — oder Port von BSD nach Linux, um genau zu sein. Und alle sollten Nachkommen oder unterschiedliche Implementierungen von . Tatsächlich ist sh ist auf den meisten Systemen nur ein Symlink zu bash, dash oder etwas anderem. Was zählt, ist die POSIX-Konformität —. Wenn Sie Skripte gemäß den Standards schreiben, treten keine Probleme auf.

Der Unterschied zwischen diesen Shells besteht in Optimierungen und Leistung. Sie sind weniger funktionsreich als bash, aber sie sind völlig legitime Shells. Bash ist reich an Funktionen für interaktives Arbeiten, benötigt jedoch beispielsweise mehr Speicher.

Kommentare

  • Aber für die Verwendung von Skripten sind sie kompatibel?
  • Und was die POSIX-Konformität angeht, selbst wenn ich diesem Standard folge, denke ich nicht, dass ein Skript, das für Bash geschrieben wurde, auf einem sh oder dessen Nachkommen ausgeführt werden kann.
  • Sie sollten kompatibel sein miteinander, wenn Sie ' einige obskure Funktionen nicht verwenden. Wenn Sie jedoch ein Bash-Skript verwenden, können weitere Probleme auftreten.
  • beabsichtigte niemals, Bash mit sh oder ash oder dash zu verwenden. Was sind diese obskuren Funktionen?
  • Viele der neueren Funktionen von bash ' sind Ergänzungen über POSIX, sodass es immer wahrscheinlicher wird, dass Sie nicht portierbaren Code schreiben, wenn Sie ' verwendet sie. IIRC sogar das [[]] Konstrukt ist nicht in sh. Beachten Sie auch, dass, wenn Sie ' kein reines Shell-Skript schreiben, auch Unterschiede in den Tools ins Spiel kommen (verschiedene Versionen von sed, grep, awk …).

Antwort

Es sollte erwähnt werden, dass auf einigen Systemen, insbesondere Debian, / bin / ash ist nicht verfügbar:

$ type ash dash bash: type: ash: not found dash is /bin/dash 

Kommentare

  • Möglicherweise ist Asche in der Busybox.
  • Es gibt jedoch viele Systeme, die ' auch nicht bash haben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.