Обзор Bash
Большинство пользователей компьютеров не интересуются, каким образом компьютер выполняет свою работу. Например, когда пользователь посещает Web-страницы, посылает и получает электронные письма, он взаимодействует с компьютером на очень высоком уровне. Программное обеспечение, которое изолирует пользователя от низкоуровневых деталей, известно как операционная система. Операционная система имеет специальный компонент, называемый ядром, который и взаимодействует напрямую с аппаратным обеспечением компьютера.
Для упрощения часто выполняемых на компьютерах задач поверх операционной системы с течением времени надстраивались графические интерфейсы типа Microsoft® Windows®, K Desktop Environment (KDE), GNU Network Object Model Environment (GNOME), Aqua от Apple и X11 от X Consortium. Однако так было не всегда. До того, как оконные системы завоевали популярность, пользователи компьютеров работали в командной строке, напрямую взаимодействуя с ядром при выполнении своей работы. Так как такой путь был труден и часто приводил к ошибкам, было разработано программное обеспечение промежуточного уровня, называемое командной оболочкой, которое упрощало работу по взаимодействию с ядром операционной системы.
Краткая история командных оболочек UNIX
Автором первой широко распространенной командной оболочки был Стивен Борн (Stephen R. Bourne) из AT&T Bell Labs, создавший свою программу в 1974 году и назвавший ее Bourne shell. Эта командная оболочка была написана для того, чтобы упростить взаимодействие пользователя с версией UNIX Seventh Edition от Bell Labs Research. Bourne shell предоставляет язык программирования, позволяющий пользователю контролировать входные и выходные потоки программы и содержащий мощные поисковые возможности.
Примерно в то же время в Университете штата Калифорния в Беркли (University of California, Berkeley) разрабатывалась альтернативная реализация UNIX, получившая известность как BSD UNIX (BSD - Berkeley Software Distribution). В 1978 году Билл Джой (Bill Joy) также в Беркли разработал новую командную оболочку UNIX, названную C Shell (/bin/csh), которая имела дополнительную функциональность, включая контроль заданий, псевдонимы и улучшенные возможности по взаимодействию с пользователем. Вдобавок средства программирования в C Shell были приближены к языку программирования C. Однако некоторые из этих изменений усложнили разработку и поддержку сценариев командной оболочки.
Впоследствии были разработаны и другие командные оболочки, в том числе Korn shell (/bin/ksh) и TC shell (/bin/tcsh) - расширения оригинальных Bourne shell и C Shell соответственно. Несмотря на ряд улучшений, обе эти командные оболочки имели и свои недостатки. Korn shell распространялась изначально с закрытыми исходными кодами, а TC shell сохранила многие сложности при написании сценариев, свойственные C Shell. Вскоре была разработана международная спецификация, известная как POSIX (Portable Operating System Interface) 1003.2, которая указывала, каким образом командная оболочка должна взаимодействовать с пользователем.
Командная оболочка Bash (/bin/bash), название которой является сокращением от Bourne-Again SHell, была первоначально разработана Брайаном Фоксом (Brian Fox) из Free Software Foundation; цель разработки состояла в том, чтобы преодолеть ограничения предыдущих оболочек. Продолжая традиции Bourne shell, Bash предоставляет следующие преимущества:
- Мощный и простой в использовании язык сценариев.
- Преимущества интерактивного взаимодействия, заимствованные из семейства командных оболочек C Shell.
- Свобода распространения и полностью открытые исходные коды.
- Полная реализация спецификации POSIX 1003.2.
Благодаря богатой истории развития Bash предоставляет ряд полезных особенностей, которые улучшают взаимодействие пользователя с командной оболочкой и упрощают разработку сценариев - простых программ, автоматизирующих пользовательские задачи. Bash легко настраивается - как через специальные файлы инициализации, так и через опции настройки. В Таблице 1 представлены некоторые из основных особенностей, которые расширяют возможности взаимодействия с Bash.
Таблица 1. Основные особенности командной оболочки Bash
| Особенности | Описание |
|---|---|
| Редактирование в командной строке | Позволяет легко перемещать курсор и редактировать текст команды. |
| История команд | Дает возможность повторить или при необходимости изменить команду, которая была введена в командной строке ранее. |
| Перенаправление ввода-вывода | Позволяет легко указать команде, откуда брать входные данные и куда направлять выходные данные. |
| Псевдонимы | Позволяет создавать краткие обозначения для однострочных команд. |
| Функции | Позволяет создавать сокращения для многострочных команд. |
Bash предоставляет множество других полезных возможностей по упрощению разработки и поддержки сценариев командной оболочки, однако описание этих возможностей не входит в это руководство.