Главная » Программирование для UNIX » Зачем нужна программируемая оболочка?

0

Оболочка UNIX  не является типичным примером командного процессора:  хотя она  и  позволяет запускать программы привычным  способом,  но,  будучи языком  программирования, она  способна и на  большее. Давайте ненадолго вернемся назад к тому, что уже  было описано. Это стоит  сделать,  во-первых, потому что  в этой  главе  представлено очень  много  материала, а во-вторых, потому что,  пообещав рассказать  о «наиболее часто  используемых свойствах оболочки», авторы посвятили 30  страниц примерам программирования в оболочке. Но дело  в том,  что  используя оболочку, вы  все  время пишете маленькие однострочные программы: конвейер – это программа, такая же как и при-

мер с «Чай готов». Оболочка работает следующим образом: пользователь постоянно программирует ее, но делать это настолько просто и естественно (когда научишься), что он не воспринимает этот процесс как программирование.

Оболочка сама  занимается некоторыми вещами, например организацией  циклов, перенаправлением ввода-вывода при  помощи < и >, расширением имен  файлов посредством *,  так  что  программам не  надо беспокоиться  об  этом, и,  что  еще  важнее, применение этих  средств единообразно для  любых программ. Другие свойства (командные фай лы, каналы) на самом  деле предоставляются ядром, а оболочка обеспечивает естественный синтаксис для  их создания. Они выходят за пределы  простого обеспечения удобства пользователя,  фактически расширяя возможности системы.

Оболочка обязана ядру  UNIX  большей частью своих  свойств: например,  хотя оболочка  организует каналы, но  перемещение данных  по ним выполняется ядром. Благодаря тому что система обрабатывает исполняемые файлы специальным образом, можно создать  командный файл так, чтобы  он  работал так  же,  как и  откомпилированная программа. Пользователю не надо знать, что это командные файлы – для  обращения к ним  не требуется специальной команды типа  RUN. К тому же оболочка сама  является программой, а не частью ядра, поэтому ее можно настраивать,  расширять и использовать, как и любые  другие программы. Такая концепция воплощена не только в системе UNIX, но здесь она реализована наилучшим образом.

Разговор о программировании оболочки будет продолжен в главе 5, а пока  запомните одну вещь: что бы вы ни делали в оболочке, вы ее программируете,  именно этим  в  значительной  степени объясняется то, что она так хорошо работает.

История и библиография

Оболочка была   программируемой с  давних  пор. Первоначально существовали отдельные команды для if, goto и метки; при  запуске команда goto сканировала входной файл с самого начала в поиске нужной  метки. (Так  как было невозможно заново прочитать канал, было невозможно и  направить данные в  командный  файл, в  котором использовалась управляющая логика).

Оболочка пользователя в седьмой версии была создана Стивом  Бурном (Steve Bourne), Джон Мэши  (John Mashey) помогал ему и подал  некоторые  идеи. В этой редакции содержится все, что нужно для  программирования, вы увидите это в главе 5. Кроме  того, усовершенствованы ввод и вывод: предоставлена возможность перенаправлять ввод-вывод в программы оболочки и из  них  без ограничений. Разбор метасимволов в именах файлов является внутренним свойством этой оболочки; в

предыдущих версиях существовала специальная программа, которая должна была работать на очень маленьких машинах.

Вам могла встретиться и другая оболочка (а может быть, именно ее вы и  используете), csh  –  так называемая «Си-оболочка», которая была разработана в  Беркли Биллом Джоем (Bill  Joy)  на  основе  оболочки шестой версии. «Cи-оболочка» пошла дальше, чем оболочка Бурна, в направлении интерактивной  поддержки. Наиболее примечательным является механизм сохранения предыстории, который делает возможным повторение (вероятно, с незначительным редактированием) ранее  выполненных  команд.  Синтаксис также  несколько отличается. Поскольку  «Cи-оболочка»  основана  на  более  ранней  оболочке,  в  ней меньше возможностей для  программирования; она  является  скорее интерактивным  командным процессором, чем  языком программирования. В частности, невозможно осуществлять направление данных в управляющие операторы и из них.

Программа pick  была  создана Томом  Даффом  (Tom  Duff), а команда bundle была  независимо придумана Аланом Хьюитом (Alan  Hewett) и Джеймсом Гослингом (James Gosling).

Источник: Керниган Б., Пайк Р., UNIX. Программное окружение. – Пер. с англ. – СПб: Символ-Плюс, 2003. – 416 с., ил.

По теме:

  • Комментарии