Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Руководство по Bash для начинающих
Назад Глава 1: Командная оболочка и скрипты Bash Вперед

Исполнение команд

Общие положения

Bash определяет тип программы, которая должна быть выполнена. Обычно программами являются системные команды, которые есть в вашей системе в откомпилированном виде. Когда выполняется такая программа, создается новый процесс, поскольку Bash создает точную копию самого себя. Этот порожденный процесс использует точно такие же настройки среды, что и родительский процесс, отличается только номер идентификатора процесса ID. Эта процедура называется forking или ветвление процессов.

После ветвления процессов, адресное пространство дочернего процесса будет перезаписано с данными нового процесса. Это выполняется с помощью обращения к системе через вызов команды exec.

Таким образом, с помощью механизма fork-and-exec (порождение процесса и его выполнение) происходит переключение исполнения от старой команды к новой, причем настройка среды, в которой исполняется новая программа, остается такой же самой, в том числе остается такой же конфигурация устройств ввода и вывода, переменных среды и приоритет. Этот механизм используется при создания любых процессов UNIX, причем это также относится и к операционной системе Linux. Даже для первого процесса init, имеющего ID, равный 1, во время загрузки системы в так называемой процедуре начальной загрузки (процедура bootstrapping) происходит порождение новых процессов и их выполнение.

Встроенные команды командной оболочки

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

В Bash поддерживается три типа встроенных команд:

  • Bourne Shell built-ins: Встроенные команды Bourne Shel: :, ., break, cd, continue, eval, exec, exit, export, getopts, hash, pwd, readonly, return, set, shift, test, [, times, trap, umask и unset.
  • Встроенные команды Bash: alias, bind, builtin, command, declare, echo, enable, help, let, local, logout, printf, read, shopt, type, typeset, ulimit и unalias.
  • Специальные встроенные команды: Когда Bash выполняется в режиме POSIX, специальные встроенные команды будут другими и их отличие будет в следующем:
    • Во время поиска команды, команда сначала ищется среди специальных встроенных команд, а затем — среди функций командной оболочки.
    • Если специальная встроенная команда возвращает состояние ошибки, то в неинтерактивном режиме происходит выход из командной оболочки.
    • Инструкции присваивания, предшествующие команде, оказывают эффект на среду оболочки только после завершения команды.
    Специальными встроенными командами POSIX являются следующие :, ., break, continue, eval, exec, exit, export, readonly, return, set, shift, trap и unset.

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

Выполнение программ из скрипта

Когда программа, которая должна быть выполнена, является скриптом командной оболочки, bash с помощью команды fork создаст новый процесс bash. Этот подпроцесс будет считывать по одной строке скрипта. Команды в каждой строке читаются, интерпретируются и выполняются как если бы они набирались с клавиатуры.

Пока подоболочка будет обрабатывать каждую строку скрипта, родительская оболочка будет ожидать завершение дочернего процесса. Как только все сроки скрипта shell будут прочитаны, подоболочка завершит работу. Родительская оболочка возобновит работу и выдаст новую строку приглашение.


Предыдущий раздел: Оглавление Следующий раздел:
Преимущества Bash   Составляющие компоненты