Ich bin gespannt, warum man Bash anstelle von Zsh ausführen möchte. Ich meine, zsh ist vollständig abwärtskompatibel mit bash. Versteht mich nicht falsch: Ich mag keine Schläge oder ähnliches. Ich möchte nur wirklich wissen, ob die Verwendung gegenüber zsh irgendwelche Vorteile hat.
Welchen Grund gibt es also, bash über zsh zu verwenden?
Antworten:
Zwei Gründe kommen in den Sinn:
Erstens - es ist praktisch überall verfügbar. Ich habe mehrere Linux-Systeme (in diesem Fall CentOS 4.x), auf denen zsh nicht installiert ist. Ebenso muss ich alte Systeme wie Solaris 2.6 und höher, HP-UX 10 und höher und ähnlich knarrende Versionen von AIX berühren. Deshalb muss ich bash auf diesen Computern so ziemlich verwenden, was ich tue, weil ich im Laufe eines Monats Dutzende, wenn nicht sogar Hunderte einzelner Computer berühre Standardeinstellungen.
Zweitens - es ist praktisch überall verfügbar. Dies bedeutet, dass ich ein Bash-Shell-Skript schreiben kann und zu 99% sicher bin, dass es funktioniert, wenn es an einen anderen Ort übertragen wird.
Ja, diese Gründe sind oberflächlich gleich, aber die Gründe dafür sind unterschiedlich.
quelle
Bash wird im Allgemeinen mit jedem System geliefert, zsh nicht. Ich liebe zsh, aber aus diesem Grund benutze ich zsh für die interaktive Verwendung, aber Bash für alle meine Skripte .
Ich finde, dass dies alles einfacher hält, da ich selbst dann subtile Unterschiede feststelle, wenn ich die bash-kompatiblen Optionen (setopt SH_WORD_SPLIT?) Auswähle.
quelle
zsh ist nicht vollständig bash-kompatibel. Es gibt verschiedene Unterschiede. Neuere zsh-Versionen sind besser mit bash kompatibel (= ~ unterstützt, exec verfügt jetzt über zusätzliche Flag-Optionen usw.), die vollständige Kompatibilität ist jedoch kein Ziel, auch nicht unter "emulieren".
Zum Beispiel ist bash substring $ {foo: offset: len}, aber in zsh ist es $ foo [start, end] und das ist nur ein einfaches Beispiel.
zsh ist eine von tcsh und ksh beeinflusste Shell, die vieles auf ihre eigene Weise tut. POSIX-Kompatibilität ist ausdrücklich kein Ziel, aber die Entwickler reagieren auf Patches, die Optionen hinzufügen oder Verhaltensweisen emulieren, die die Dinge näher an POSIX bringen. Aber wenn Sie sich wirklich mit der Leistungsfähigkeit der Shell befassen, erstellen Sie Skripte, die nur zum Schreiben bestimmt sind, mehr noch als Bash.
bash ist POSIX sh + ksh + pedanticism, wobei einige Funktionen jetzt aus zsh kopiert wurden. Es gibt auch schreibgeschützte Skripte, aber da es weniger leistungsstarke Operatoren hat, wird die Prägnanz von zsh möglicherweise nicht verwendet und die Dinge sind besser lesbar (mit Ausnahme aller Anführungszeichen, um die Aufteilung von Leerzeichen zu vermeiden, bedeutet das blöde $ -Array im ksh-Stil zuerst -Element-of-Array, nicht alle-Elemente-of-Array, etc etc).
Das Schreiben von Skripten, die die Leistung einer der beiden Shells voll ausnutzen, ist unklug, es sei denn, Sie befinden sich in einer eingeschränkten Umgebung (z. B. Schreiben von System-RC-Skripten, in denen einige FSs möglicherweise nicht bereitgestellt werden usw.). Verwenden Sie im Idealfall Perl / Python / Ruby / whatever für alles, was groß genug ist, um die Ausdruckskraft zu benötigen, die nicht in Bourne sh enthalten ist, wenn andere es beibehalten sollen. Behalten Sie das Shell-Zeug für Dinge, die sich auf die interaktive Shell beziehen (Tab-Vervollständigungsprogrammierung usw.).
Ich würde bash nicht über zsh verwenden. Ich würde für einfache Skripte Bare-Sh-over-Zsh verwenden oder zu einer Sprache wechseln, in der assoziative Arrays anständige Operatoren haben (anders als in Zsh, wo sie wiederum "prägnant" sind). Ich könnte ein sh-Skript auf bash umstellen, wenn ich diese kleine Funktion benötige, um ein vorhandenes, bewährtes Skript zu erweitern, und keine Zeit habe, es jetzt umzuschreiben.
quelle
Mein Rat: Wenn Sie absolute Portabilität anstreben, schreiben Sie mit Bourne-Shell-Regeln, und kümmern Sie sich nicht einmal um Korn-Shell-Erweiterungen. Wie bereits erwähnt, sind das einige ältere "große Kisten", die überhaupt keine GNU-Shells haben.
Bash macht schon "zu viel". Ich habe einen Freund bei der Arbeit, der Zsh bevorzugt, aber ich weiß nicht genau, was es tut.
Wie auch immer, schreiben Sie entweder für die Bourne-Shell (oder "bourne again") oder alternativ, wenn Sie ein benutzerdefiniertes Skript für eine kleine Anzahl bestimmter Boxen ausführen, überspringen Sie die "Shell Hell" vollständig und schreiben Sie einfach mit Perl oder Python (oder was auch immer) Ihr bevorzugter lokal installierter Interpreter ist).
quelle
Zusätzlich zu dem oben genannten Portabilitätsgrund könnte ein weiterer Grund sein, dass bash immer noch Funktionen hinzufügt.
Zum Beispiel bash v4.x + eingeführt:
rekursives Globbing:
autocd:
quelle
Unsinn. Wenn Sie wissen, dass jedes System, das Sie interessiert, über BASH verfügt, ist dies eine absolut vernünftige Aussage. BASH bietet viele nützliche Funktionen, die in POSIX sh nicht sinnvoll emuliert werden können. Die frivole Verwendung von Nicht-POSIX-Funktionen ist keine gute Idee, aber die Verwendung, wenn Sie sie wirklich benötigen, ist in Ordnung.
Portabilität ist kein absolutes Muss. Es ist fraglich, wie weit Sie es brauchen, genau wie alles andere. Fedora verwendet zum Beispiel Shell-Befehle zum Erstellen von RPM-Paketen und die Fedora-Verpackungsrichtlinien besagen, dass es in Ordnung ist, alle Funktionen von BASH zu verwenden, da alle Pakete nativ auf Fedora erstellt werden müssen. Auch wenn theoretisch andere Distributionen ohne BASH ihre Quell-RPMs wiederverwenden möchten, haben sie sich aufgrund der praktischen Anwendbarkeit für die Portabilität entschieden und nicht für Ihr Mantra "IMMER UZE POSIX !! 1".
ZSH hat sich nicht als Standard-Shell durchgesetzt, nur weil es ein riesiges Durcheinander von halbgebackenen Ideen ist.
quelle
Übrigens wurde Ihnen hier oft gesagt, dass
bash
es praktisch überall zu finden ist. Verwenden Sie es also, um tragbare Skripte zu schreiben, was falsch ist .Die richtige Art, tragbare Unix-Skripte zu schreiben, ist die Verwendung
sh
, die in jedem * nix-System zu finden ist .Jede andere Shell
sh
ist nur ein tägliches interaktives Tool von Ihnen.Wenn es darum geht,
bash
vszsh
-bash
in mehr*nixes
als gebündelt zu bekommenzsh
, gibt es hier die Nachteile der Installation zusätzlicher Software auf dem System - Sie müssen sie warten. Einige Leute lieben zsh "coole Features", also zahlen sie diesen Preis gern, andere nicht.quelle
sh
den Kompatibilitätsmodus, wenn es als ausgeführt wird , auch wenn es sich um bash handeltsh
.Ein weiterer Punkt:
Viele Programme bieten standardmäßig eine coole Bash-Vervollständigung. Für mich ist es der Grund, nicht zu wechseln.
[hinzugefügt im Juli 2013] Nun, nachdem ich seit dem obigen Kommentar einige Jahre lang zsh verwendet habe, muss ich sagen, dass die Tab-Vervollständigung (sogar die eingebaute ohne Modifikationen der 3. Parität) brillant ist und weit über die von bash angebotene hinausgeht . :).
quelle