Korn shell - posix и светлое будущее, которое не случилось
Я не вникал в это раннее, просто по-близости упоминаний считал что Bourne shell и есть тот самый posix.
Оказывается, нет. Точнее, не совсем.
Я со своей фиксацией на Bourne-shell не заметил слона в комнате - Korn shell. А зря. Именно он задал направление развития остальным (bash, z shell), сам став основой для стандарта.
А потом его вообще попытались довести до полноценного высокоуровневого языка.
Погубила его жадность AT&T. 2 тыщи долларов за лицензию.
Я нашел несколько публикаций, достойных ознакомления:
- Ksh - An Extensible High Level Language. David G. Korn1 pdf
- AT&T charged $2,000/site for the Korn shell (ссылка)
я так понимаю, что эта публикация была подготовлена для конференции проходившей в октябре 1994-го года. текст
Дальше, краткая выжимка из них.
Оболочки были неудобны
В 80-х оболочкой по-умолчанию был Thompson shell. Ему на смену пришла оболочка Боурна (Bourne shell) в Юникс V7. В неё добавили управляющие инструкции (if, switch, for), но она все ещё была неудобна для интерактивного использования. В ней отсутствовали привычные нам:
- редактирование строк (readline)
- автодополнение для команд и имён файлов по tab (tab completion)
~для ссылки на домашнюю директорию- псевдонимы для команд (aliases)
- история команд
- управление процессами
Чтобы проникнуться атмосферой тех времен - можно попробовать dash.
Korn shell
Внутри AT&T Дэвид Корн (David Korn) доработал оболочку Боурна и получился ksh - Korn Shell. Коллеги переходили на него и он стал де-факто стандартом внутри компании.
Однако, он не был свободным. AT&T предлагали оформить на него лицензию - за 2000 долларов (в нынешних долларах, с учётом инфляции, все 6000). Это было очень дорого хоть для частных лиц, хоть для организаций.
Bash (1989) и pdksh (1989) появились как свободные реализации, похожие на ksh, но не полностью совместимые с ним.
Стандартизация произойдет лишь в 1992-м. Появится стандарт того самого Posix shell - POSIX.2 (IEEE POSIX 1003.2 и ISO/IEC 9945-2). По-сути, он будет похож на ksh 88-го года (ksh88).
Работа над ksh была продолжена.
ksh93
C оглядкой на awk, perl, tcl появился ksh93. Заявленная цель - довести язык оболочки до полноценного высокоуровневого языка.
- Встроенная работа с арифметикой (раньше использовалась утилита
expr) - Ассоциативные массивы
- Дополнительные возможности работы со строками
- расширенные регулярные выражения (Extended regular expression), как в awk, perl, tcl
- новые операторы для работы со строками
- операторы можно применять к элементам массива, ассоциативного массива
- вложенные пространства имён
- теперь переменная это больше чем просто ячейка для хранения значения. Можно делать геттеры для переменных
и прочее и прочее. Можно расширять список встроенных функций собственными, написанными на Си (надо слинковывать и собирать). Можно встраивать ksh93 как язык сценария, как tcl или lua. Можно было разрабатывать графические приложения (на motif-виджетах, wksh)
Круто! Но ksh93 оставался не под свободной лицензией. Он будет опубличен лишь в марте 2000 года (kornshell faq, q10)! И продолжал разрабатываться до 2012-го.
ksh93 сегодня
Сейчас ksh93 развивается сообществом - ksh93/ksh (github)
Из коробки в Макоси есть последняя выпущенная AT&T версия ksh93
$ which ksh
/bin/ksh
$ ksh --version
version sh (AT&T Research) 93u+ 2012-08-01