Almquist shell (также известный как A Shell , ash и sh ) — это облегченная оболочка Unix , изначально написанная Кеннетом Альмквистом в конце 1980-х годов. Изначально являясь клоном варианта System V.4 оболочки Bourne shell , она заменила оригинальную оболочку Bourne shell в версиях BSD Unix, выпущенных в начале 1990-х годов.
ash был впервые выпущен посредством публикации в группе новостей Usenet comp.sources.unix , одобренной и модерируемой Ричем Сальцем 30 мая 1989 года . Он был описан как «повторная реализация оболочки System V [с] большинством функций этой оболочки, а также некоторыми дополнениями». [1]
Быстрый, небольшой и практически совместимый [ требуется ссылка ] со спецификацией стандарта POSIX оболочки Unix, ash не предоставлял механизмов редактирования строк или истории команд , поскольку Альмквист считал, что такую функциональность следует перенести в драйвер терминала . Однако текущие варианты поддерживают ее.
Следующая информация извлечена из информации о пакете ash из Slackware v14:
ясень (раковина из ясеня Кеннета Алмквиста)
Облегченная (92K) оболочка, совместимая с Bourne. Отлично подходит для машин с небольшим объемом памяти, но не предоставляет всех дополнительных возможностей оболочек, таких как bash , tcsh и zsh . Запускает большинство сценариев оболочки, совместимых с оболочкой Bourne. Обратите внимание, что в Linux большинство сценариев, похоже, используют по крайней мере некоторый синтаксис, специфичный для bash. Скрипты установки Slackware являются заметным исключением, поскольку ash — это оболочка, используемая на установочных дисках. NetBSD использует ash в качестве своего /bin/sh.
Из оригинального релиза ash было создано множество ответвлений. [2] Эти производные ash устанавливаются как оболочка по умолчанию ( /bin/sh
) на FreeBSD , NetBSD , DragonFly BSD , MINIX , и в некоторых дистрибутивах Linux . MINIX 3.2 использовала оригинальную версию ash , чья тестовая функция отличалась от POSIX. [3] Эта версия оболочки была заменена в MINIX 3.3. Android использовал ash до Android 4.0 , после чего переключился на mksh . [4]
В 1997 году Герберт Сюй перенес проект ash
с NetBSD на Debian Linux . В сентябре 2002 года, с выпуском 0.4.1, этот порт был переименован в Dash ( Debian Almquist shell ). Главными приоритетами Сюя являются соответствие POSIX и тонкая реализация. [2]
Как и его предшественник, Dash не поддерживает ни интернационализацию и локализацию , ни многобайтовую кодировку символов (оба требуются в POSIX). [ необходима ссылка ] Редактирование строк и поддержка истории на основе GNU Readline необязательны ( --with-libedit
).
Из-за его тонкости Ubuntu решила принять Dash в качестве оболочки по умолчанию /bin/sh
[6] [7] в 2006 году. Причиной использования Dash является более быстрое выполнение сценариев оболочки , [8] особенно во время запуска операционной системы, по сравнению с предыдущими версиями Debian и Ubuntu, которые использовали Bash для этой цели, хотя Bash по-прежнему является оболочкой входа по умолчанию для интерактивного использования. [9] Dash стал оболочкой по умолчанию /bin/sh
в Ubuntu , начиная с выпуска 6.10 в октябре 2006 года. [7] Dash заменил Bash и стал оболочкой по умолчанию /bin/sh
в Debian 6 (Squeeze), выпущенном в феврале 2011 года. [6]
Результатом этого сдвига стало то, что было обнаружено, что многие скрипты оболочки используют специфичные для Bash функциональные возможности («башизмы») без надлежащего объявления их в строке shebang . [10] [11] Впервые проблема была обнаружена в Ubuntu, и разработчики Ubuntu решили привести все скрипты в соответствие со стандартом POSIX . Позднее изменения были перенесены в Debian, который в конечном итоге /bin/sh
также принял Dash в качестве своего стандарта. В результате политика Debian была изменена, чтобы позволить разработчикам скриптов использовать оболочку, в значительной степени совместимую с POSIX, за исключением расширений, объединенных в Dash для удобства ( local
, echo -n
, test -a / -o
). [12] [13] Похожий переход произошел в Slackware Linux, хотя их версия ash
основана на Dash лишь частично. [2]
Ash (в основном форк Dash) также довольно популярен во встраиваемых системах Linux . Dash версии 0.3.8-5 был включен в BusyBox , исполняемый файл-ловушку, часто используемый в этой области, и используется в таких дистрибутивах, как DSLinux, Alpine Linux , Tiny Core Linux и прошивках маршрутизаторов на базе Linux , таких как OpenWrt , Tomato и DD-WRT . Многие поставщики коммерческих систем также включают его, поскольку он не является GPL -Ware, но имеет лицензию, которая его позволяет, например, на Sophos XGs он ошибочно называется «Advanced Shell».