Es gibt mehrere Programme, die die Sprache von implementieren /bin/sh
. Auf Ubuntu /bin/sh
ist 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/sh
ist 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/sh
es eine symbolische Verknüpfung zu dash
. Sie können bash
stattdessen 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/sh
oder 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 sh
Skripte 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 -sf
ist 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 mv
atomar.)
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/bash
Umschalten 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/sh
sollten keine bash-spezifischen Funktionen verwenden, aber Distributionen, die mit bash ausgeliefert werden, verwenden /bin/sh
möglicherweise bash-spezifische Funktionen in #!/bin/sh
Skripten, die für diese Distribution spezifisch sind (es ist in Ordnung, solange keine Benutzererwartungen bestehen) kann zu dash as wechseln /bin/sh
und 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.