Korn shell - posix и светлое будущее, которое не случилось

· 3 мин. чтения
Оглавление

Я не вникал в это раннее, просто по-близости упоминаний считал что 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 (ссылка)
1

я так понимаю, что эта публикация была подготовлена для конференции проходившей в октябре 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