Intereting Posts
Наблюдатель NMI: Watchdog обнаружен жесткий LOCKUP на процессоре Gsub поддерживать строку между ними; Найти каталог, содержащий все файлы в моем списке Как возобновить видеоролики YouTube в VLC? Windows Internals для Linux sudoedit root принадлежит файлу в корневом каталоге Как безопасно убивать процессы, чтобы перенаправление вывода не прерывалось? Параметры переменных окружения из файла Может ли хакер заменить приложение «Биткойн-кошелек» на вредоносный в каком-то репозитории Linux? Не удалось получить доступ к общему ресурсу Linux с компьютера Windows с ошибкой NT_STATUS_BAD_NETWORK_NAME Как экспортировать цепочку сертификатов CA из PFX в формате PEM без атрибутов сумки Управление командной строкой qemu Скрипт для открытия соответствующих pdf-файлов для ключей bibtex в Vim Составить имя файла внутри сценария ожидания Как сравнить два файла по строкам, чтобы проверить, сколько из них перемещено вверх или вниз?

Почему в системе Unix есть несколько оболочек?

Я только начал изучать основы Unix и задаюсь вопросом, почему в UNIX-системе так много оболочек. Из книги « Расширенная программирование в среде Unix» :

Оболочка – это интерпретатор командной строки, который считывает ввод пользователя и выполняет команды. Пользовательский ввод в оболочку обычно выполняется из терминала (интерактивной оболочки) или иногда из файла (называемого сценарием оболочки).

Затем книга перечислит ряд программ оболочки, таких как Bourne shell, Bourne-again shell, Cshell и т. Д. Мой вопрос в основном почему нам нужны несколько оболочек?

Большинство оболочек, используемых в современных средах UNIX, должны соответствовать спецификации POSIX sh. POSIX sh получен из исходной оболочки Korn (ksh88), которая, в свою очередь, получена из более ранней оболочки Bourne, но POSIX sh указывает только небольшое подмножество четных функций ksh88. В оболочке, которая реализует только минимальные требования, не хватает многих функций, необходимых для написания всех, но наиболее тривиальных сценариев, безопасным и разумным образом. Например, локальные переменные и массивы являются нестандартными дополнениями.

Поэтому первой причиной является расширение оболочки дополнительными функциями. Различные снаряды предпочитают сосредоточиться на разных вещах. Например, Zsh фокусируется на расширенных интерактивных функциях, а ksh93 (текущая «оригинальная» оболочка korn) фокусируется на мощных функциях программирования и производительности. Даже очень минимальные оболочки, такие как Dash, добавляют по крайней мере несколько нестандартных дополнений, таких как локальные переменные.

Дополнительные функции редко бывают совместимыми, если вообще. Большая часть функциональности ksh88 довольно хорошо взаимодействует, такая как расширенный синтаксис globbing, но с нестандартными функциями нет гарантий, и вы должны действительно знать, что вы делаете, чтобы использовать их в переносном режиме.

Вторая причина – наследие. Есть еще много фирменных Unixes, которые используют древние нестандартные реализации для своих / bin / sh. До недавнего времени Solaris все еще использовала Bourne в качестве своего defuault и предпочла сохранить оболочку Heirloom, а не модернизировать что-то современное. Эти системы обычно поставляются с различными оболочками, к которым вы можете переключиться, например, путем изменения вашей переменной PATH или изменения shebangs в отдельных сценариях.

Итак, чтобы подвести итог. Есть несколько оболочек, часто по умолчанию:

  • Для дополнительных функций, особенно для работы с не переносимыми дополнениями.
  • Для обработки устаревших скриптов, которые часто не поддерживаются.
  • размер / производительность. Встраиваемые системы часто требуют небольших оболочек, таких как mksh или busybox sh.
  • Лицензионные причины. AT & T ksh является запатентованным программным обеспечением примерно до 2000 года. Это во многом то, что породило все кш-подобные клоны, такие как Zsh и Bash.
  • Другие исторические причины. Хотя это и не очень популярно сегодня, были радикальные попытки перепроектировать язык, такой как scsh и es. Функция замещения процесса для многих оболочек изначально происходит от rc (с немного отличающимся синтаксисом) и расширения фигуры от csh. Различные оболочки имеют разные комбинации доступных функций, как правило, с некоторыми тонкими или не столь тонкими различиями.

Потому что у людей разные потребности, и хорошо иметь альтернативы, соответствующие вашим потребностям в данной ситуации. Оболочка – это просто инструмент сам по себе и должен быть заменен любым другим, на мой взгляд. Это сила Unix / Linux, в отличие от Microsoft Windows.

Точно так же … Почему так много текстовых редакторов? Почему люди разрабатывают новый браузер, если его уже есть? Почему существуют GNOME, KDE, Xfce, LXDE, E17 и т. Д.?

Короткий ответ

Из-за странной истории лицензирования ни одна организация не разработала Unix. Это был общественный процесс, в котором участвовали как добровольцы, так и корпорации. Эти сущности не всегда делили все свои инструменты, поэтому произошли отдельные оболочки. Когда мы поняли, насколько это контрпродуктивно, было слишком поздно объединять все используемые оболочки. Вместо этого была сделана работа, чтобы гарантировать, что все эти оболочки будут (теоретически) совместимы друг с другом .

Длительный ответ сложный и тесно связан с историей самой Unix. Нет никакого способа, чтобы он держал один ответ на этой странице, но он был широко (неправильно) документирован. Вы найдете более подробные и точные ответы, просмотрев веб-страницы и книги, посвященные истории Unix.

В основном, история …

Bourne был разработан как часть (приличия) SysV Unix, в то время как BSD использовала csh … Позже bash был разработан как альтернатива open-source для оболочки Bourne (и ее улучшенные версии, такие как ksh). В стандарте POSIX была принята оболочка типа Bourne. ksh совместим, и bash может быть совместимым.

Оболочки, такие как csh и tcsh , намного проще использовать в интерактивном режиме, чем исходная оболочка Bourne (которые не имеют завершения команды и т. Д.), Но ужасны для сценариев …

В некоторых средах, таких как встроенные системы на основе Unix, возможности сценариев, размер и скорость важнее интерактивных функций, таких как завершение команды, и, как правило, используется другой вариант оболочки.

Для портативных сценариев вы должны использовать POSIX-совместимый вариант Bourne и избегать расширений.

Различные оболочки существуют по тем же причинам, что и разные веб-браузеры: у каждого есть предпочтение, а у некоторых снарядов есть исторический багаж или импульс. Каждый имеет разные особенности и особенности.