Es gibt mehrere Programme, die die Sprache von implementieren /bin/sh. Auf Ubuntu /bin/shist dash, das so konzipiert ist, dass es schnell ist, wenig Speicher benötigt und nicht viel mehr als das Minimum unterstützt, das von erwartet wird /bin/sh. Auf RHEL /bin/shist bash langsamer und benötigt mehr Speicher, hat aber mehr Funktionen. Eine dieser Funktionen ist der ==Operator für die [bedingte Syntax. Dash unterstützt [, was eine grundlegende sh-Funktion ist, aber keinen ==Operator hat, der eine bash- (und ksh- und zsh-) Erweiterung ist.
Sie können Ihr System auf bash umstellen. Unter Ubuntu gibt /bin/shes eine symbolische Verknüpfung zu dash. Sie können bashstattdessen einen symbolischen Link zu erstellen. Aktuelle Versionen von Debian und Ubuntu (und Derivaten) machen dies zu einer Installationsoption von Dash. Führen Sie zum Ändern den Befehl aus
sudo dpkg-reconfigure dash
und antworten Sie mit "Ja", um den Gedankenstrich beizubehalten, /bin/shoder mit "Nein", um zur Bash zu wechseln.
Sie können Bash als behalten /bin/sh, aber es wird Ihr System ein bisschen langsamer machen. Es ist sogar vorstellbar, dass einige Systemskripte nicht mit bash kompatibel sind, obwohl dies unwahrscheinlich ist, da bash meistens eine Übermenge von Gedankenstrichen ist.
Für Distributionen, die keine Schnittstelle zur Auswahl zwischen Implementierungen von haben /bin/sh, lesen Sie hier, wie Sie zu bash wechseln.
sudo ln -s bash /bin/sh.bash
sudo mv /bin/sh.bash /bin/sh
Lassen Sie ein Terminal geöffnet und prüfen Sie, ob Sie danach noch einige shSkripte ausführen können . Wenn Sie diesen Befehl durcheinander bringen, wird Ihr System unbrauchbar. (Übrigens, der Grund, warum ich die oben genannten Mehrfachbefehle anstelle der unkomplizierten Befehle verwendet habe sudo ln -sf bash /bin/sh, ln -sfist nicht atomar. In dem zugegebenermaßen unwahrscheinlichen Fall, dass Ihr Computer während dieses Vorgangs abstürzt, müssen Sie von einem Notfallmedium booten, um ihn wiederherzustellen. Ist dagegen mvatomar.)
So stellen Sie den Bindestrich wieder her als /bin/sh:
sudo ln -s dash /bin/sh.dash
sudo mv /bin/sh.dash /bin/sh
Beachten Sie, dass das /bin/bashUmschalten auf dash zu einem Fehlschlagen von Skripten führen kann , wenn sh in Ihrer Distribution standardmäßig aktiviert ist, da bash viel mehr Funktionen als dash enthält. Bash-Skripte sollten mit beginnen #!/bin/bash, und Skripte, die mit beginnen, #!/bin/shsollten keine bash-spezifischen Funktionen verwenden, aber Distributionen, die mit bash ausgeliefert werden, verwenden /bin/shmöglicherweise bash-spezifische Funktionen in #!/bin/shSkripten, die für diese Distribution spezifisch sind (es ist in Ordnung, solange keine Benutzererwartungen bestehen) kann zu dash as wechseln /bin/shund es gibt keine Erwartung, dass diese Skripte auf einer anderen Distribution funktionieren).
==, ist das , was sein sollte=. Das und die Variablenerweiterungen sollten in doppelte Anführungszeichen gesetzt werden.