Wie bereits erwähnt, bash
ist dies in der Standardinstallation für viele Distributionen üblich. Ihr Skript erreicht nicht die größte Benutzerbasis, wenn Sie sich auf verlassen zsh
.
Eine wichtige Frage, die Sie vor dem Entwerfen Ihres Skripts beantworten müssen, lautet: " Warum spielt es eine Rolle, in welcher Shell ein Skript ausgeführt wird? "
Unterschiedliche Shells verwenden unterschiedliche Syntax oder bieten zusätzliche Shell-Funktionen, die von anderen Shells möglicherweise nicht unterstützt werden. Um ein Skript für die "allgemeine Linux-Endbenutzerwelt" zu schreiben, stellen Sie fest, ob Ihr Skript Syntax- oder Shell-Funktionen verwendet, die von einer bestimmten Shell-Umgebung abhängen.
Beispielsweise unterstützt die bash
Shell bestimmte Erweiterungen, die von der dash
Bourne-Shell nicht unterstützt werden oder /bin/sh
auf die auf dem System des Benutzers verwiesen wird.
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash
Wenn Sie versuchen, echo {1..10}
mit im /bin/sh
Vergleich zu auszuführen , erhalten /bin/bash
Sie eine sehr unterschiedliche Ausgabe.
Das Gleiche gilt für zsh
das, obwohl es die meisten bash
Syntaxfunktionen unterstützt, zusätzliche Erweiterungen und Syntaxfunktionen bietet, die von der bash
Shell nicht unterstützt werden . In diesen Tabellen finden Sie Beispiele für den Vergleich von Schalen .
Sie können Ihre potenzielle Benutzerbasis darüber hinaus erweitern, bash
indem Sie Skripts verwenden, die beim Aufrufen mit funktionieren #!/bin/sh -u
. Dies wirft jedoch eine weitere wichtige Frage auf: " Was wird im Austausch für mehr Portabilität geopfert? "
Stellen Sie fest, ob Unterschiede in Bezug auf Sicherheitsbedenken, Funktionalität, Effizienz oder andere Aspekte, die Ihrer Meinung nach für Ihr Skript Priorität haben, das Opfer wert sind. Möglicherweise möchten Sie ein Skript mit einer bekannten Sicherheitslücke nicht in großem Umfang verwenden, nur weil es in mehreren Umgebungen funktioniert.
Es sind so viele Skripte dafür geschrieben, bash
dass die Unterstützung dieser Skripte als Kriterium beim Vergleich von Befehlsshells verwendet wird . Es können viel mehr Benutzer Ihr Skript ausführen, als wenn es auf zsh
einer Shell-Umgebung oder einer anderen Syntax basiert.
Bedenken Sie auch, dass Sie letztendlich keine Kontrolle darüber haben, wie der Benutzer das Skript ausführt (auch nützlich zum Debuggen von Skripten in verschiedenen Shells ):
Denken Sie daran, dass die Shell alle Kommentare am Anfang des Shell-Skripts als Kommentare behandelt, wenn Sie ein Shell-Skript ("sh-Skriptname") lesen, anstatt es direkt auszuführen ("./scriptname"). Insbesondere wird der Kommentar, der den Interpreter angibt, der beim Ausführen des Skripts verwendet werden soll ("#! / Bin / sh -u"), ebenso wie alle Optionen, die neben diesem Interpreter aufgeführt sind, ignoriert.
Das Beste, was Sie dagegen tun können, ist, Ihre Skripte portabel zu machen, solange es keine großen Einbußen bei der Funktionsweise gibt.
Möglicherweise werden auch Konventionen für die Bash-Codierung angezeigt - Stapelüberlauf .
zsh
möglicherweise populär, während es in anderen Kreisen ( Bankensektor) so gut wie unbekannt ist. Ich denke, Sie sollten viel mehr Informationen geben, wenn Sie diesbezüglich geeignete Ratschläge benötigen.