Debian и Ubuntu перешли на dash (iirc) из-за нескольких вещей. Прежде всего, Bash стал большим за эти годы. На самом деле /bin/bash
двоичный файл в моей системе Ubuntu 8.04 почти в десять раз (!) Больше, чем /bin/dash
. Теперь, это не имеет большого значения для повседневного использования оболочки, но имеет значение в следующих ситуациях:
- Dash намного меньше и, следовательно, загружается быстрее, что является благом для init-скриптов. Если вам приходится запускать много из них, каждый раз загружая Dash вместо Bash, это значительно ускоряет процесс.
- Из-за меньшего размера Dash, Debian и Ubuntu могут сократить большую часть размера их initrd, оставляя больше места для других вещей (и снова, ускоряя процесс).
Недостатком использования Dash вместо Bash для сценариев является то, что многие люди используют синтаксические тонкости, которыми обладает только Bash, так называемые Bashisms . Примерами Bashisms являются подстроки, как это:
echo $SHELL
/bin/bash
a=1234567890
echo ${a}
1234567890
echo ${a:3}
4567890
echo ${a:3:1}
4
И это:
echo ${a#123}
4567890
Dash, с другой стороны, в основном стремится быть совместимым с POSIX (и не более того), даст вам ошибку Bad Substitution, если вы попробуете это:
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
Это будет иметь значение, если вы будете использовать /bin/sh
(и, следовательно dash
) использовать в качестве переводчика для своих шелл-скриптов и использовать в них Bashisms. У Debian и Ubuntu есть хорошие вики-страницы о Bashisms и почему они плохи в сценариях оболочки в целом и сценариях инициализации в частности. Таким образом, вы должны сознательно выбирать , нужно ли вам /bin/sh
или в /bin/bash
качестве переводчика для вашего сценария.
Dash не должен использоваться в качестве оболочки по умолчанию в ваших системах. Просто используйте Bash для этого. Для переносимости ваших сценариев вы можете использовать Dash в качестве интерпретатора, чтобы увеличить шансы запуска сценариев в других версиях Linux и Unix.