Я только начал изучать основы Unix и удивляться, почему в Unix-подобных системах так много оболочек. Из книги Расширенное программирование в среде Unix :
Оболочка - это интерпретатор командной строки, который читает пользовательский ввод и выполняет команды. Обычно пользовательский ввод в оболочку осуществляется с терминала (интерактивная оболочка) или иногда из файла (называемого сценарием оболочки).
А затем в книге перечисляется ряд программ оболочки, таких как оболочка Bourne, оболочка Bourne-again, Cshell и т. Д. Мой вопрос в основном, почему нам нужно несколько оболочек?
Ответы:
Большинство оболочек, используемых в современных средах UNIX, должны соответствовать спецификации POSIX sh. POSIX sh является производным от исходной оболочки Korn (ksh88), которая, в свою очередь, является производной от более ранней оболочки Bourne, но POSIX sh указывает только небольшое подмножество функциональных возможностей даже ksh88. В оболочке, которая реализует только минимальные требования, отсутствуют многие функции, необходимые для написания всех, кроме самых простых сценариев, безопасным и разумным способом. Например, локальные переменные и массивы являются нестандартными дополнениями.
Поэтому первая причина - расширить оболочку дополнительными функциями. Различные оболочки предпочитают фокусироваться на разных вещах. Например, Zsh фокусируется на расширенных интерактивных функциях, а ksh93 (текущая «оригинальная» оболочка korn) - на мощных функциях программирования и производительности. Даже очень минимальные оболочки, такие как Dash, добавляют по крайней мере несколько нестандартных дополнений, таких как локальные переменные.
Дополнительные функции редко широко совместимы, если вообще имеют место. Большая часть набора функций ksh88 достаточно хорошо взаимодействует, например, расширенный синтаксис глобализации, но с нестандартными функциями нет никаких гарантий, и вы должны действительно знать, что вы делаете, чтобы использовать их в переносимом режиме.
Вторая причина - наследие. Есть еще много проприетарных Unix, которые используют древние нестандартные реализации для своих / bin / sh. До недавнего времени Solaris все еще использовал Bourne в качестве дефолта и предпочитал поддерживать оболочку Heirloom, а не обновлять ее до чего-то современного. Эти системы обычно поставляются с разными оболочками, на которые вы можете переключиться, например, путем изменения переменной PATH или изменения shebang в отдельных скриптах.
Итак, подведем итог. Есть несколько оболочек, часто по умолчанию:
источник
local
это не POSIX или Unix, это указано и требуется в стандарте Linux (LSB) и стандарте политики debian . Обратите внимание, чтоes
это продолжениеrc
.mksh
возникло как Public Domain Bourne Shell, также было написано по причинам лицензирования. (Эти проблемы все еще остаются - лицензирование, переносимость и размер были тремя факторами, которые помогли мне убедить Google включить mksh с Android.)Потому что у людей разные потребности, и хорошо иметь альтернативы, соответствующие вашим потребностям в данной ситуации. Оболочка - это просто инструмент сам по себе и должен быть заменен любым другим, по моему мнению. Это сила Unix / Linux, в отличие от того, что Microsoft Windows выбрала.
Точно так же ... Почему так много текстовых редакторов? Почему люди разрабатывают новый браузер, если он уже есть? Почему есть GNOME, KDE, Xfce, LXDE, E17 и т. Д.?
источник
COMMAND.COM
в DOS был заменяемым. Тем не менее, вы часто получаете очень хрупкую систему из-за предположений других приложений (и других пользователей). В результате есть несколько успешных альтернативCMD.EXE
. Одним из них является PowerShell, который по инерции поддерживает Microsoft. Другой пример, как ни странно,bash
из-за достойной поддержки со стороны сообщества Cygwin, не говоря уже о людях MinGW. Что касается оконных менеджеров, то в Windows их было по одному, но с течением времени их было несколько.Короткий ответ
Из-за странной истории лицензирования ни один объект не разработал Unix. Это был процесс сообщества, в котором приняли участие как добровольцы, так и корпорации. Эти сущности не всегда разделяли все свои инструменты, поэтому произошли отдельные оболочки. К тому времени, когда мы поняли, насколько это контрпродуктивно, было уже слишком поздно объединять все используемые оболочки. Вместо этого была проделана работа по обеспечению того, чтобы все эти оболочки были (теоретически) совместимы друг с другом .
Длинный ответ сложен и тесно связан с историей самого Unix. Там нет никакого способа, которым он будет удерживать один ответ на этой странице, но он был широко (неправильно) задокументирован. Более подробные и точные ответы вы найдете, просмотрев веб-страницы и книги, посвященные истории Unix.
источник
Различные оболочки существуют по тем же причинам, что и разные веб-браузеры: у каждого есть предпочтения, а у некоторых оболочек есть исторический багаж или импульс. Каждый из них имеет свои особенности и особенности.
источник
В основном история ...
Bourne был разработан как часть (проприетарного) SysV Unix, в то время как BSD использовала
csh
... Позже bash был разработан как альтернатива оболочке Bourne с открытым исходным кодом (и ее улучшенные версии, такие как ksh). Борновидная оболочка была принята в стандарте POSIX. ksh соответствует требованиям, а bash может соответствовать требованиям.Оболочки, как
csh
иtcsh
намного проще в использовании в интерактивном режиме, чем оригинальная оболочка Bourne (в которой не хватает завершения команд и т. Д.), Но ужасны для сценариев ...В некоторых средах, таких как встроенные системы на основе Unix, функции сценариев, размер и скорость более важны, чем интерактивные функции, такие как завершение команд, и обычно используются различные варианты оболочек.
Для переносимых сценариев вы должны использовать POSIX-совместимый вариант Bourne и избегать расширений.
источник