Linux Tools: shells - историческая часть

linux linux-tools shell

Shell, шелл, терминал, консоль, Command Line Interface, cli – по сути все это название командного интерпретатора, которые существует во всех операционных системах и позволяет посылать системе команды для выполнения, собирать эти команды в скрипты и выполнять уже наборы команд.

Звучит все очень просто, но так было не всегда и все удобства современных командных интерпретаторов появились не сразу. Сегодня кратко рассмотрим историю развития шеллов.

1971, Thompson shell - написан Кеном (внезапно) Томпсоном в Bell Labs и использовался в первой версии Unix. Кен Томпсон совместно с Денисом Ритчи являются ни много ни мало создателями операционной система Unix и языка программирования C.

1975, PWB (Mashey) shell - разработан Джоном Маши (John Mashey) в Bell Labs для PWB (Programmer’s Workbench) Unix - дистрибутив для разработчиков (но не взлетел). Основан на Thompson Shell c фичами для упрощения разработки.

Тут следует сделать небольшое отступление – все шеллы до Borne Shell были больше нацелены на выполнения команд (интерактивный режим), а не для скриптов.

Thompson Shell создавался очень минималистичным, в одной из последних был реализован концепт пайпов (command1 > command2), но в остальном даже такие простые вещи как if были сделаны отдельными командами — основной функционал был направлен именно на выполнение команд.

В Mashey shell if, elseif, goto (и другие) были добавлены как часть самого шелла, появились аналоги $HOME, $PATH.

Bourne Shell был написан с нуля, фичи обсуждались с участниками сообщества, плюс популярность после публикации книги The Unix Programming Environment Брайна Кернигана и Роба Пайка — все это сыграло в пользу Borne Shell и разработка Mashey Shell была прекращена, хотя достаточно много фич из Mashey были реализованы в Borne.

1976, 1979, Bourne Shell (sh) - в 1976 Стивен Борн начал разработку, а в 1979 Bourne Shell был включен в Unix версии 7 как шелл по умолчанию. Это первый распространенный шелл со скриптовым языком.

1978, C shell (csh) – разработан Биллом Джоем, шелл с собственным синтаксисом несовместимым с sh, был широко распространен в BSD-дистрибутивах. Если sh привносил удобства написания скриптов, то сsh добавлял множество фич именно для пользователя: перенаправление потоков, пайпы, история, навигация внутри командной строки, автодополнение и еще много удобств интерактивного режима.

1983, Korn Shell (ksh) - разработан Дэвидом Корном и первоначально основан на bash (видимо на каких-то дорелизных версиях). Позже реализованный в ksh механизм работы с задачами (jobs) был добавлен в bash.

1989, Born Again Shell (bash) - первый релиз того самого шелла. Разрабатывался сначала Ричардом Столлманом, потом Брайном Фоксом. bash совместил лучшее из sh и csh, привнес свое и стал популярен в том числе благодаря Линусу Торвальдсу, который запустил bash одной из первых программ на своем новом ядре.

1989, Almquist shell (ash) - Kenneth Almquist выпустил первую версию легковесного шелла совместимого с Bourne Shell. ash пришел на замену sh в BSD версиях Unix. Основным плюсом была его малый размер и скорость работы и конечно совместимость с sh.

1990, Z Shell (zsh) - разработан Паулем Фалстадом (Paul Falstad). Кратко - это bash с кучей улучшений: история выполненных команд шарится между сессиями, программируемое автодополнение команд, коррекция опечаток (это все конечно уже в настоящее время).

1997, 2002, Debian Almquist shell (dash) - в 1997 Herbert Xu портирует код из NetBSD в Debian Linux, а в 2002 происходит переимнование в dash.

2001 - код ash добавлен в Busybox (это минимальный набор unix-утилит в одном бинарнике).

2005, Friendly interactive shell (fish) - начал разрабатываться Акселем Лильенкранцем. Расширенное автодополнение, подсветка синтаксиса и другие улучшения нацеленные именно на удобство пользователя.

2006 - dash становится дефолтным шелом /bin/sh в дистрибутивах Ubuntu и Debian — вот так из 1980’ых в 2000’ые ash попал как базовый скриптовый шелл в одни из самых популярных дистрибутивов Linux.

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

 

Итого

Дальше более подробно рассмотрим современную реализацию ash. По скриптовым возможностям ash совместим с bash, но по функционалу (особенно интерактивному) гораздо меньше — поэтому изучив ash, изучим основу bash.

Следующая статья: Linux Tools: shells, ash #1 - ash startup, ash arguments

 

Ссылки


Все статьи серии “Linux Tools”