Debian i Ubuntu przeszły na dash (iirc) z kilku powodów. Po pierwsze, Bash stał się duży na przestrzeni lat. W rzeczywistości /bin/bash
plik binarny w moim systemie Ubuntu 8.04 jest prawie dziesięć razy (!) Większy niż /bin/dash
. To nie ma większego znaczenia dla codziennego używania powłoki, ale ma to znaczenie w następujących sytuacjach:
- Dash jest znacznie mniejszy i dlatego ładuje się szybciej, co jest dobrodziejstwem dla skryptów inicjujących. Jeśli musisz zacząć wiele z nich, za każdym razem ładowanie Dash zamiast Bash znacznie przyspiesza.
- Z powodu mniejszego rozmiaru Dasha, Debian i Ubuntu są w stanie ogolić całkiem spory kawałek wielkości swojego initrd, pozostawiając więcej miejsca na inne rzeczy (i znowu, przyspieszając).
Wadą używania Dasha zamiast Basha do pisania skryptów jest to, że wiele osób korzysta z subtelności składni tylko Bash, tak zwanych Bashism . Przykładami baszizmów są podciągi, takie jak to:
echo $SHELL
/bin/bash
a=1234567890
echo ${a}
1234567890
echo ${a:3}
4567890
echo ${a:3:1}
4
I to:
echo ${a#123}
4567890
Z drugiej strony Dash ma głównie na celu zachowanie zgodności z POSIX (i nie więcej), da ci zły błąd podstąpienia, jeśli spróbujesz:
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
Będzie to miało znaczenie, jeśli użyjesz /bin/sh
(i dlatego dash
) jako interpretera skryptów powłoki i użyjesz w nich baszizmów. Debian i Ubuntu mają ładne strony wiki o Bashismach i dlaczego są one złe w skryptach shells, aw szczególności skryptach init. Dlatego powinieneś świadomie wybrać, czy potrzebujesz /bin/sh
czy /bin/bash
jako tłumacz twojego skryptu.
Dash nie powinien być używany jako domyślna powłoka w twoim systemie. Po prostu użyj do tego Bash. Aby zwiększyć przenośność skryptów, możesz użyć Dasha jako interpretera, aby zwiększyć szanse, że skrypty będą działały na innych wersjach Linuxa i Uniksach.