Debian und Ubuntu sind wegen einiger Dinge auf Dash (iirc) umgestiegen. Erstens ist Bash im Laufe der Jahre groß geworden. Tatsächlich ist die /bin/bash
Binärdatei auf meinem Ubuntu 8.04-System fast zehnmal (!) So groß wie /bin/dash
. Nun, das ist für den täglichen Gebrauch der Shell nicht wichtig, aber in den folgenden Situationen ist es wichtig:
- Dash ist viel kleiner und lädt daher schneller, was ein Segen für Init-Skripte ist. Wenn Sie viele davon starten müssen, beschleunigt das Laden von Dash anstelle von Bash die Dinge erheblich.
- Aufgrund der kleineren Dash-Größe können Debian und Ubuntu einen ziemlich großen Teil der Größe ihrer Initrd abschneiden, wodurch mehr Platz für andere Dinge bleibt (und wiederum die Dinge beschleunigt werden).
Der Nachteil der Verwendung von Dash anstelle von Bash für die Skripterstellung ist, dass viele Leute syntaktische Feinheiten verwenden, die nur Bash bietet, die sogenannten Bashisms . Beispiele für Bashisms sind Teilstrings wie folgt:
echo $SHELL
/bin/bash
a=1234567890
echo ${a}
1234567890
echo ${a:3}
4567890
echo ${a:3:1}
4
Und das:
echo ${a#123}
4567890
Dash hingegen zielt hauptsächlich darauf ab, POSIX-kompatibel zu sein (und nicht mehr als das). Wenn Sie dies versuchen , wird ein Fehler aufgrund einer fehlerhaften Substition angezeigt :
echo $SHELL
/bin/dash
# actually, it will read /bin/bash above, because if you just run dash
# it will not set the $SHELL variable :)
a=1234567890
echo ${a}
1234567890
echo ${a:3}
dash: Bad substitution
Dies ist wichtig, wenn Sie /bin/sh
(und daher dash
) als Interpreter für Ihre Shellscripts verwenden und in diesen Bashisms verwenden. Debian und Ubuntu haben nette Wiki-Seiten über Bashisms und warum sie schlecht in Shellskripten im Allgemeinen und Init-Skripten im Besonderen sind. Daher sollten Sie sich bewusst entscheiden, ob Sie als Interpreter /bin/sh
oder /bin/bash
für Ihr Skript benötigen .
Dash sollte auf Ihren Systemen nicht als Standardshell verwendet werden. Benutze dafür einfach Bash. Um die Portabilität Ihrer Skripte zu gewährleisten, können Sie Dash als Interpreter verwenden, um die Wahrscheinlichkeit zu erhöhen, dass die Skripte auf anderen Linux-Versionen und -Unixen ausgeführt werden.