Тем не менее, оболочка Korn - в отличие от оболочки POSIX - никогда по-настоящему не становилась популярной вне коммерческого мира Unix. Это связано с тем, что его рост соответствовал ранним годам коммерциализации Unix, поэтому он оказался втянутым в войны Unix . BSD Unixes отказались от нее в пользу оболочки C, и ее исходный код не был свободно доступен для использования в Linux, когда он только начинался. Итак, когда первые дистрибьюторы Linux начали искать командную оболочку для своего ядра Linux, они обычно выбирают GNU Bash , один из тех - sh
совместимых, о которых вы говорите.
Это ранняя связь между Linux и Баш в значительной степени опечатали судьбу многих других оболочек, в том числе ksh
, csh
и tcsh
. Сегодня эти снаряды по-прежнему используют несгибаемые врачи, но они в меньшинстве ».
Я использовал «сценарий оболочки» выше как общий термин, означающий сценарии оболочки Bourne / POSIX. Это связано с повсеместностью семейных раковин Борна. Чтобы говорить о сценариях на других оболочках, вам нужно дать классификатор, такой как «сценарий оболочки C». Даже в системах, где оболочка семейства C является интерактивной оболочкой по умолчанию, для сценариев лучше использовать оболочку Bourne.
Есть много способов проверить, является ли данный сценарий оболочки семейства Борнов переносимым:
Ранние версии BSD Unix были просто дополнительными коллекциями программного обеспечения для V6 Unix. Поскольку оболочка Bourne не добавлялась в AT & T Unix до V7, технически BSD изначально не имела оболочки Bourne. Ответ BSD на примитивную природу оболочки Томпсона был C-оболочкой .
Тем не менее, первые версии автономная из BSD (2.9BSD и 3BSD) были основаны на V7 или его преемнике портативного UNIX / 32V , поэтому они сделали включать оболочку Борна.
(The 2BSD линия превратилась в параллельную развилку BSD для Digital в миникомпьютеров PDP , в то время как линии 3BSD и 4BSD продолжал воспользоваться новыми типами компьютеров , как VAXen и Unix рабочих станций 2.9BSD была по существу версия PDP из 4.1cBSD;. Они были современники, и общий код . ПРП не просто исчезает , когда VAX прибыл, так что 2BSD линия еще Shambling вместе .)
Можно с уверенностью сказать, что оболочка Bourne была повсюду в мире Unix к 1983 году. Это хорошее приближение к «навсегда» в компьютерной индустрии. MS-DOS получил иерархическую файловую систему в том же год (Awww, как cuuute!) И первые 24-разрядные Macintosh с 9" B & W экрана - не оттенки серой, буквально черными и белыми - не вышло бы до начала следующего года.
Оболочка Томпсона была довольно примитивной по сегодняшним меркам. Это была только интерактивная командная оболочка, а не среда программирования сценариев, которую мы ожидаем сегодня. У него действительно были такие вещи, как каналы и перенаправление ввода / вывода, которые мы считаем прототипической частью «оболочки Unix», так что мы думаем о командной оболочке MS-DOS как о получении их из Unix.
Bourne оболочка также заменить ПРБ оболочку , которая добавила важные вещи оболочки Томпсона , как программируемость ( if
, switch
и while
) и раннюю форму переменных окружения. Оболочка PWB еще менее запомнилась, чем оболочка Томпсона, поскольку она не была частью каждой версии Unix.
Если кто-то не знает, что такое совместимость с оболочкой POSIX и Bourne, это может означать целый ряд вещей.
С одной стороны, они могли бы использовать оболочку Bourne 1979 года в качестве базовой линии. « sh
-Совместим сценарий» в этом смысле означает, что , как ожидается, прекрасно работать на истинной оболочке Bourne или любом из его наследников и клонов: ash
, bash
, ksh
, zsh
и т.д.
Кто-то в другом крайнем случае принимает оболочку, указанную POSIX, как базовую линию. Мы принимаем так много функций оболочки POSIX как «стандартные» в наши дни, что часто забываем, что их на самом деле не было в оболочке Bourne: встроенная арифметика, управление заданиями, история команд, псевдонимы, редактирование командной строки, $()
форма команды замена и т. д.
Хотя у оболочки Korn есть корни, восходящие к началу 1980-х, AT & T не выпускала ее в Unix до выпуска System V Release 4 в 1988 году. Поскольку так много коммерческих Unix- систем основано на SVR4, это включало ksh
практически все соответствующие коммерческие Unix из конец 1980-х годов.
(Несколько странных разновидностей Unix, основанных на SVR3 и более ранних, сохранившихся на рынке после выхода SVR4, но они были первыми против стены, когда началась революция .)
1988 год - это также год, когда вышел первый стандарт POSIX с его оболочкой Porn на основе оболочки Korn. Позже, в 1993 году, вышла улучшенная версия оболочки Korn. Поскольку POSIX эффективно прибил оригинал на месте, ksh
разделились на две основные версии: ksh88
и ksh93
, названные в честь лет, проведенных в их расколе.
ksh88
не является полностью POSIX-совместимым, хотя различия невелики, поэтому некоторые версии ksh88
оболочки были исправлены как POSIX-совместимые. (Это из интересного интервью на Slashdot с доктором Дэвидом Г. Корном . Да, парень, который написал оболочку.)
ksh93
является полностью совместимым надмножеством оболочки POSIX . Разработка ksh93
была спорадической с тех пор, как хранилище первоисточника перешло с AT & T на GitHub, причем последнему выпуску было около 3 лет, когда я пишу это, ksh93v. (Базовое имя проекта остается ksh93
с добавленными суффиксами для обозначения версий выпуска после 1993 года.)
Системы, которые включают оболочку Korn отдельно от оболочки POSIX, обычно делают ее доступной /bin/ksh
, хотя иногда она скрывается в другом месте.
Когда мы говорим об ksh
оболочке Korn по имени, мы говорим о ksh93
функциях, которые отличают ее от ее обратно совместимых подмножеств оболочки Bourne и POSIX. Вы редко сталкиваетесь с чистым ksh88
сегодня.
AT & T сохраняла собственный исходный код оболочки Korn до марта 2000 года . К тому времени ассоциация Linux с GNU Bash была очень сильной. Bash и ksh93
каждый из них имеют преимущества перед другими , но на данный момент инерция тесно связывает Linux с Bash.
Что касается того, почему ранние поставщики Linux чаще всего выбирают GNU Bash pdksh
, который был доступен в то время, когда Linux начинал, я думаю, это потому, что большая часть остальной части пользовательского пространства также пришла от проекта GNU . Bash также несколько более продвинут, чем pdksh
, поскольку разработчики Bash не ограничиваются копированием функций оболочки Korn.
Работа над ним pdksh
прекратилась примерно в то время, когда AT & T выпустила исходный код для настоящей оболочки Korn. Однако есть две основные вилки, которые все еще поддерживаются: OpenBSD pdksh
и MirBSD Korn Shellmksh
.
Интересно, что mksh
это единственная реализация оболочки Korn, в настоящее время упакованная для Cygwin.
GNU Bash выходит за рамки POSIX во многих отношениях, но вы можете попросить его работать в более чистом режиме POSIX .
csh
/ tcsh
Обычно в начале 90-х годов в BSD Unixes была интерактивная оболочка по умолчанию.
Будучи вариантом BSD , ранние версии Mac OS X были такими же, через Mac OS X 10.2 «Jaguar» . OS X переключил оболочку по умолчанию с tcsh
Bash в OS X 10.3 «Пантера» . Это изменение не коснулось систем, обновленных с версии 10.2 или более ранних. Существующие пользователи в этих преобразованных системах сохранили свою tcsh
оболочку.
FreeBSD утверждает, что по-прежнему использует tcsh
оболочку по умолчанию , но на виртуальной машине FreeBSD 10, которую я здесь имею, оболочкой по умолчанию является один из POSIX-совместимых вариантов оболочки Almquist . Это верно и для NetBSD.
В OpenBSD pdksh
вместо этого используется оболочка по умолчанию.
Более высокая популярность Linux и OS X заставляет некоторых желать, чтобы FreeBSD также переключилась на Bash, но они не будут делать это в ближайшее время по философским причинам . Это легко переключить , если это вас беспокоит.
В /bin/sh
наши дни редко можно встретить систему с по-настоящему ванильной оболочкой Борна . Вы должны приложить все усилия, чтобы найти что-то достаточно близкое для тестирования совместимости.
Мне известен только один способ запустить подлинную винтажную оболочку Bourne 1979 года на современном компьютере: использовать образы дисков Ancient Unix V7 с симулятором SIMH PDP-11 из проекта Computer History Simulation Project . SIMH работает практически на каждом современном компьютере , а не только на Unix-подобных. SIMH работает даже на Android и iOS .
С OpenSolaris , Sun с открытым кодом версии SVR4 оболочки Борна впервые. До этого исходный код для версий оболочки Bourne после V7 был доступен только тем, у кого есть лицензия на исходный код Unix.
Этот код теперь доступен отдельно от остальной части несуществующего проекта OpenSolaris из нескольких разных источников.
Наиболее прямым источником является проект оболочки Heirloom Bourne . Это стало доступно вскоре после оригинальной версии 2005 OpenSolaris. В течение следующих нескольких месяцев была проведена некоторая работа по переносимости и исправлению ошибок, но затем разработка проекта остановилась.
Йорг Шиллинг проделал лучшую работу по поддержке версии этого кода, как и osh
в его пакете инструментов Schily . См. Выше для получения дополнительной информации об этом.
Помните, что эти оболочки, полученные из выпуска исходного кода 2005 года, содержат поддержку многобайтовых наборов символов , управление заданиями, функции оболочки и другие функции, отсутствующие в исходной оболочке Bourne 1979 года.
Один из способов определить, используете ли вы оригинальную оболочку Bourne, - проверить, поддерживает ли она недокументированную функцию, добавленную для облегчения перехода от оболочки Thompson: ^
в качестве псевдонима для |
. То есть команда like ls ^ more
выдаст ошибку в оболочке типа Korn или POSIX, но она будет вести себя как ls | more
в настоящей оболочке Bourne.
Иногда вы столкнулись fish
, scsh
или rc/es
приверженец, но они еще реже , чем поклонники C оболочки.
rc
Семейство оболочек обычно не используется в системах Unix / Linux, но семья является исторически важным, что , как он получил место в диаграмме выше. rc
является стандартной оболочкой Plan 9 от операционной системы Bell Labs , своего рода преемника 10-го издания Unix , созданного в рамках постоянных исследований Bell Labs по проектированию операционной системы. Он несовместим как с Bourne, так и с оболочкой C на уровне программирования; там, наверное, урок.
Наиболее активным вариантом, по- rc
видимому, является поддерживаемый Тоби Гудвином , основанный на rc
клоне Unix Байрона Ракициса.
sh
). Для другой оболочки это означает, может ли эта оболочка запускать сценарии оболочки Bourne.