Оболочка Bourne — обратно совместимая оболочка Unix, созданная Дэвидом Корном
KornShell ( ksh) — оболочка Unix , разработанная Дэвидом Корном в Bell Labs в начале 1980-х годов и анонсированная на USENIX 14 июля 1983 года. [1] [2] Первоначальная разработка была основана на исходном коде оболочки Bourne . [7] Другими ранними участниками были разработчики Bell Labs Майк Вич и Пэт Салливан, которые написали код режимов редактирования строк в стиле Emacs и vi соответственно. [8] KornShell обратно совместима с оболочкой Bourne и включает в себя многие функции оболочки C , вдохновленные запросами пользователей Bell Labs.
Функции
KornShell соответствует POSIX.2 , Shell and Utilities, Command Interpreter (IEEE Std 1003.2-1992.) Основные различия между KornShell и традиционной оболочкой Bourne включают в себя:
улучшенные циклы for и while, ориентированные на выражения
динамическая расширяемость (динамически загружаемых) встроенных команд (начиная с ksh93 )
справочные переменные
иерархически вложенные переменные
переменные могут иметь связанные с ними функции-члены
объектно-ориентированное программирование (с ksh93t )
переменные могут быть объектами с переменными-членами и методами-членами
Методы объекта вызываются с именем переменной объекта, за которым (после символа точки) следует имя метода.
Вызываются специальные методы объекта: инициализация или назначение объекта, отказ от объекта ( unset )
доступна композиция и агрегация, а также форма наследования
История
KornShell изначально был проприетарным программным обеспечением . В 2000 году исходный код был выпущен под лицензией, принадлежащей AT&T, но с момента выпуска ksh93q в начале 2005 года он был лицензирован под лицензией Eclipse Public License . [4] KornShell доступен как часть коллекции программного обеспечения с открытым исходным кодом AT&T Software Technology (AST). Поскольку KornShell изначально был доступен только по проприетарной лицензии от AT&T, было создано несколько бесплатных и открытых альтернатив. К ним относятся pdksh , mksh , Bash и Z shell .
Функциональность оригинального KornShell, ksh88 , была использована в качестве основы для стандарта POSIX.2 , Shell and Utilities, Command Interpreter (IEEE Std 1003.2-1992).
Некоторые поставщики по-прежнему поставляют собственные версии старого варианта ksh88 , иногда с расширениями. ksh93 поддерживается на GitHub . [10]
Как "Desktop KornShell" ( dtksh ), ksh93 распространяется как часть Common Desktop Environment . [11] Эта версия также обеспечивает сопоставления на уровне оболочки для виджетов Motif . Она была задумана как конкурент Tcl / Tk . [12]
Оригинальная оболочка KornShell, ksh88 , стала оболочкой по умолчанию в AIX в версии 4, [13] [14] а ksh93 была доступна отдельно. [15]
UnixWare 7 включает в себя как ksh88 , так и ksh93 . Оболочка Korn по умолчанию — ksh93 , которая поставляется как /usr/bin/ksh , а более старая версия доступна как /usr/bin/ksh88 . [16] UnixWare также включает в себя dtksh, если установлена CDE .
Дистрибутив ksh93 претерпел менее стабильную судьбу после того, как авторы покинули AT&T около 2012 года на стабильной версии ksh93u+ . Основные авторы продолжали работать над веткой ksh93v- beta примерно до 2014 года. В конечном итоге эта работа была продолжена в первую очередь Red Hat в 2017 году (из-за запросов клиентов) и привела к окончательному первоначальному выпуску ksh2020 [17] осенью 2019 года. Этот первоначальный выпуск (хотя и исправил несколько предыдущих проблем со стабильностью) привел к некоторым незначительным проблемам сбоев и совместимости. [18] В марте 2020 года AT&T решила откатить изменения сообщества, спрятать их в ветке и перезапустить с ksh93u+ , поскольку изменения были слишком обширными и слишком сфокусированными на ksh, чтобы компания могла включить их в проект в режиме обслуживания. [19] [20] Разработка исправлений ошибок продолжается в ветке ksh93u+m , основанной на последнем стабильном релизе AT&T ( ksh93u+ 2012-08-01). [21] ksh2020 [22] был выпущен как «основной релиз по нескольким причинам» [23] , таким как удаление поддержки EBCDIC , прекращение поддержки бинарных плагинов, написанных для ksh93u+ , и удаление некоторых сломанных математических функций, но никогда не поддерживался и не поддерживался AT&T (даже в первоначальную дату выпуска).
Основной вклад в основную отрасль программного обеспечения
Для целей списков ниже основная программная ветвь KSH определяется как исходная программа, датируемая с июля 1983 года и до выпуска KSH2020 в конце 2019 года. Продолжающаяся разработка последующих версий (ветвей) KSH разделилась на разные группы, начиная с 2020 года, и ниже не рассматривается.
Основные индивидуальные участники
Ниже приведен список в примерном хронологическом порядке возрастания их вклада:
Дэвид Г. Корн (AT&T Bell Laboratories, AT&T Laboratories и Google; и создатель)
Гленн С. Фаулер (AT&T Bell Laboratories, AT&T Laboratories)
Кием-Фонг Во (AT&T Bell Laboratories, AT&T Laboratories)
Адам Эдгар (AT&T Bell Laboratories)
Майкл Т. Вич (AT&T Bell Laboratories)
Патрик Д. Салливан (AT&T Bell Laboratories)
Маттейс Н. Мельхиор (AT&T Network Systems International)
Карстен-Фляйшер (Omnium Software Engineering)
Бойер-Мур
Ситешвар Вашишт (Красная Шапка)
Куртис Рейдер
Консультант по интеграции
Роланд Майнц
Основные корпоративные вкладчики
Ниже приведен список в примерном хронологическом порядке возрастания их вклада:
Помимо основных крупных корпораций-доноров (перечисленных выше), некоторые компании внесли бесплатные ресурсы в разработку KSH. Они перечислены ниже (в алфавитном порядке):
tksh – форк ksh93 , предоставляющий доступ к набору виджетов Tk .
oksh – порт варианта KornShell от OpenBSD , предназначенный для максимальной переносимости [24] между операционными системами. Он использовался как оболочка по умолчанию в DeLi Linux 7.2.
mksh – свободная реализация языка KornShell, ответвление от OpenBSD pdksh . Первоначально он был разработан для MirOS BSD и лицензирован на условиях разрешительного характера (хотя и не в качестве общественного достояния); в частности, MirOS License . [6] Помимо использования в BSD, этот вариант заменил pdksh в Debian, [26] и является оболочкой по умолчанию в Android.
SKsh – вариант AmigaOS , который предоставляет несколько специфичных для Amiga функций, таких как совместимость с ARexx . [27] В этой традиции MorphOS использует pdksh в своем SDK.
Оболочка MKS Korn компании MKS Inc. — фирменная реализация языка KornShell из Microsoft Windows Services for UNIX (SFU) до версии 2.0; по словам Дэвида Корна, оболочка MKS Korn не была полностью совместима с KornShell в 1998 году. [28] [29] В версии SFU 3.0 Microsoft заменила оболочку MKS Korn на новую оболочку, совместимую с POSIX.2, как часть Interix . [30]
KornShell включен в UWIN , пакет совместимости с Unix, разработанный Дэвидом Корном. [31]
/bin/sh в пакете System V Дуга Гвина (US Army BRL) на BSD включал версию SVR2 /bin/sh Рона Натали , которая имела как управление заданиями, так и редактирование командной строки. Это был современник оригинального ksh в то время, когда он не избежал AT&T. Впоследствии это был /bin/sh , который поставлялся со всеми системами, производными от CMU Mach. [32]
^ ab Ron Gomes (9 июня 1983 г.). "Расписание конференции USENIX в Торонто (предварительное)". Группа новостей : net.usenix . Получено 29 декабря 2010 г.
^ ab Guy Harris (10 октября 1983 г.). "csh question". Группа новостей : net.flame . Получено 29 декабря 2010 г.
^ "Korn Shell Launcher for Windows Subsystem for Linux « Musings». blog.fpmurphy.com . Получено 29.01.2021 .
^ ab "ast-open package". AT&T Research. nd Архивировано из оригинала 1 октября 2015 г. Получено 19 декабря 2022 г.
^ "LEGAL". Архивировано из оригинала 2012-02-06 . Получено 2010-06-10 .
^ ab "MirBSD Korn Shell". Mirbsd.org . Получено 10 декабря 2018 г. .
^ Korn, David G. (26 октября 1994 г.), «ksh — расширяемый язык высокого уровня», Труды симпозиума по языкам очень высокого уровня USENIX 1994 г. , Ассоциация USENIX , получено 5 февраля 2015 г. Вместо того чтобы изобретать новый язык сценариев, мы построили систему ввода форм, изменив оболочку Bourne, добавив встроенные команды по мере необходимости.
^ Bolsky, Morris I.; Korn, David G. (1989). "Благодарности". Язык команд и программирования KornShell. Englewood Cliffs, NJ: Prentice Hall. стр. xii. ISBN0-13-516972-0.
^ "традиционная семья Борн Шелл / история и развитие". In-ulm.de . Получено 10 декабря 2018 г. .
^ "Это сайт загрузки программного обеспечения AT&T Software Technology ast от AT&T Research. Коллекция программного обеспечения AT&T AST OpenSource содержит обзор и практическое повторно используемое программное обеспечение UNIX". Github.com . 10 декабря 2018 г. . Получено 10 декабря 2018 г. .
^ "2020.0.0: Стабильный выпуск ksh-2020.0.0". GitHub . Получено 2021-01-29 . Примечание: ksh2020 не поддерживается и не обслуживается
^ "ksh 2020.0.0 CHANGELOG". GitHub . 2021-01-29.
^ "oksh на GitHub". GitHub . 1 августа 2020 г.
^ "loksh на GitHub". GitHub . 15 октября 2021 г.
^ "5.11. Переход от PDKSH к MKSH". Архивировано из оригинала 2014-07-28 . Получено 2014-07-28 .
^ "Aminet - util/Shell/SKsh21.LZH".
^ "David Korn Tells All". Slashdot . Получено 22 октября 2009 г.
^ "Джерри Фельдман — участник конференции USENIX NT/LISA NT". Lists.blu.org. 29 августа 1998 г. Получено 22 октября 2009 г.
^ "Службы Windows для UNIX версии 3.0". Technet.microsoft.com . Получено 2009-10-22 .
^ Анатоль Олчак (2001). Оболочка Korn: руководство по программированию в Unix и Linux. Addison-Wesley Professional. стр. 4. ISBN978-0-201-67523-8.
^ Натали, Рон (30.01.2023). ""Управление заданиями и другие терминальные забавы"". Из списка рассылки TUHS ("The Unix Heritage Society"). Архивировано из оригинала 07.07.2024 . Получено 07.07.2024 . ... Управление заданиями Беркли было интересным хаком. Для нас в BRL проблема была в том, что я абсолютно ненавидел синтаксис оболочки C. Оболочка Korn еще не ушла от AT&T, поэтому я потратил время на выяснение того, как это на самом деле работает в оболочке C (не очень хорошо документированной), в основном путем проверки, а затем повторно реализовал ее в оболочке Bourne Shell (для этого мы использовали версию исходного кода System V). Я все еще не мог получить поддержку в BRL за использование оболочки Bourne, потому что к тому времени вышел tcsh с редактированием командной строки. Поэтому я вернулся к исходникам оболочки. К этому времени вышел 5R2, поэтому я схватил исходный код оболочки [ sic ], который. [...] Я переделал редактирование командной строки в стиле emacs в оболочку. Впоследствии у меня состоялся приятный разговор с Дэвидом Корном из USENIX, которые, вероятно, на тот момент были двумя наиболее знакомыми с внутренними элементами управления заданиями оболочки Bourne. Я также посидел с ребятами, которые писали либо bash, либо pdksh (не помню, что именно), и объяснили, как это работает [ sic ]. ... Годы спустя я ушел из BRL, провел три года в качестве администратора Ратгерса и работал в небольшом стартапе в Вирджинии. Там была рабочая станция MIPS. Я корпел над ней, используя ed... Не думая об этом, я попытался извлечь фоновое задание, набрав "fg". К моему удивлению, оболочка выдала "Управление заданиями не включено". Хм, говорю я. Похоже на мое сообщение об ошибке. "set -J" я набираю. "Управление заданиями включено". Эй! Это моя оболочка. Оказалось, что Дуг Гвин поместил мои модификации на свою дистрибутивную ленту «System V on BSD», и они попали в кодовую базу Mach, и поэтому все производные от Mach системы в конечном итоге содержали их.
Дальнейшее чтение
Моррис И. Больски; Дэвид Г. Корн (1995). Новый язык команд и программирования KornShell. Prentice Hall PTR. ISBN 978-0-13-182700-4.
Дэвид Г. Корн; Чарльз Дж. Нортрап; Джеффри Корн (июль 1996 г.). «Новый KornShell—ksh93». Linux Journal (27). Архивировано из оригинала 2015-10-11.
Внешние ссылки
Страница руководства ksh93 на Wayback Machine (архивировано 5 июня 2013 г.)
Страница руководства ksh88 на Wayback Machine (архивировано 5 ноября 2015 г.)
Оболочка Korn (pdksh) в открытом доступе на Wayback Machine (архивировано 21 октября 2016 г.)