Was ist nicht Shell-spezifisch?

9

Unter einigen Antworten werden Kommentare angezeigt, in denen empfohlen wird, Shell-spezifische Befehle in Antworten zu vermeiden.

Woher weiß ich, welche Befehle, Operatoren usw. in allen Shells vorhanden sind? Gibt es eine Liste von Standards?

  • man builtinsgibt eine Liste von Befehlen. Sind dies die einzigen Befehle, die ich in einem tragbaren Shell-Skript verwenden kann, das in allen Shells funktioniert?
  • Kann eine eingebaute Shell spezifisch sein?
  • Unterscheiden sich die Standards für Linux von denen anderer Unixe?
  • Was ist mit der Syntax? Können Interpunktion, Operatoren usw. in einigen Shells unterschiedlich sein?
musa
quelle

Antworten:

12

Gregs Wiki enthält einen Beitrag zum Anpassen von Bash-Skripten für Dash , der auf viele "Bashismen" hinweist - zusätzliche Funktionen, die nicht dem Standard entsprechen, aber Teil von Bash sind. Das Vermeiden dieser Bashismen kann dazu beitragen, Ihr Skript für verschiedene Umgebungen benutzerfreundlicher zu gestalten. Dies beantwortet insbesondere einige Ihrer Fragen. Zum Beispiel gibt es Operatoren, die sich unterscheiden (wie ==), aber es gibt einen Standard-Posix-Satz, der in allen Umgebungen funktionieren sollte.

Weitere Informationen finden Sie im Posix-Standard , dem alle Schalen entsprechen sollten. Insbesondere das Volumen zu "Shell & Utilities".

Was ich schwieriger finde als die Shell-Unterschiede, sind die Befehlsunterschiede. Viele Linux-Systeme haben GNU find, aber wenn Sie ein portables Skript schreiben, verlassen Sie sich nicht auf Ihr eigenes man find, da es viele Systeme mit BSD gibt find, die über andere Funktionen verfügen. Wenn Sie Skripte für Busybox schreiben, werden Sie feststellen, dass es verschiedene Versionen mit völlig unterschiedlichen ncs gibt. Das sind die Dinge, die mich immer beschäftigen, wenn ich ein Skript in verschiedenen Umgebungen bereitstelle.

Für zusätzliche Informationen zu guten Shell-Scripting-Praktiken gibt es auch eine gute Ressource in David Pashleys Blog: Schreiben robuster Bash-Shell-Skripte

Lesen Sie auch die Antworten und Kommentare von Gilles auf dieser Website. Er hat viele Tipps, wie Sie sicherstellen können, dass Sie tragbaren Code verwenden.

Shawn J. Goff
quelle
5

Wenn Sie ein Shell-Skript in eine bestimmte Shell schreiben, muss diese Shell installiert sein. Der einzige Standard besteht darin, alle Unix-Varianten zu haben cshund zu shinstallieren. Wenn Sie also möchten, dass Ihr Skript unter Solaris, * BSD und GNU ausgeführt wird, müssen Sie es beispielsweise in die Bourne-Shell schreiben.

Die meisten Unix-Befehle haben jedoch unterschiedliche Syntaxen bei unterschiedlichen Implementierungen - siehe psSolaris, FreeBSD und GNU -. Je nachdem, welche Tools Sie verwenden, ist Ihr Skript möglicherweise ohnehin nicht portierbar. Wo die Shell installiert ist, spielt ebenfalls eine Rolle. Ist es /bin/bash /usr/bin/bash, /usr/local/bin/bashoder woanders?

Mir sind keine Standards bekannt, die eine Shell definieren. Schauen Sie sich rc oder http://192.220.96.201/es/es-usenix-winter93.html`">es für seltsame, nicht standardmäßige Shells an. Diese scheinen jedoch immer noch einigen gängigen Ideen zu entsprechen.

Sardathrion - gegen SE-Missbrauch
quelle
7
POSIX definiert sh.
Random832