Wie bereits erwähnt, bashist 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 bashShell bestimmte Erweiterungen, die von der dashBourne-Shell nicht unterstützt werden oder /bin/shauf 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/shVergleich zu auszuführen , erhalten /bin/bashSie eine sehr unterschiedliche Ausgabe.
Das Gleiche gilt für zshdas, obwohl es die meisten bashSyntaxfunktionen unterstützt, zusätzliche Erweiterungen und Syntaxfunktionen bietet, die von der bashShell 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, bashindem 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, bashdass 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 zsheiner 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 .
zshmö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.