bash

title: bash(1)

summary: командный интерпретатор GNU Bourne\-Again SHell

text:
# bash(1)

## НАЗВАНИЕ
bash - командный интерпретатор GNU Bourne-Again SHell

## СИНТАКСИС
bash [опции] [файл]

## АВТОРСКИЕ ПРАВА
Командный интерпретатор bash создан Фондом свободно

распространяемого программного обеспечения.

Copyright (C) 1989-1999 by the Free Software Foundation, Inc.

## ОПИСАНИЕ
bash - это sh-совместимый интерпретатор командного языка,

выполняющий команды, прочитанные со стандартного входного потока

или из файла. Командный интерпретатор bash также включает

полезные средства командных интерпретаторов Korn и C (ksh и csh).

Командный интерпретатор bash создавался как соответствующий

спецификации командного интерпретатора и инструментальных средств

IEEE POSIX (IEEE

POSIX Shell and Tools specification)

(IEEE Working Group 1003.2).

## ОПЦИИ
Помимо однобуквенных опций командного интерпретатора, представленных

в описании встроенной команды set, bash

интерпретирует при вызове следующие опции:

-c строка

Если указана опция -c, команды читаются из строки. Если после строки

есть аргументы, их значения присваиваются позиционным параметрам,

начиная с $0.

-r

Если указана опция -r, командный интерпретатор становится ограниченным

(см. "ОГРАНИЧЕННЫЙ КОМАНДНЫЙ ИНТЕРПРЕТАТОР" ниже).

-i

Если указана опция -i, командный интерпретатор работает как

интерактивный.

-s

Если указана опция -s или если после обработки опций аргументов

не остается, команды читаются из стандартного входного потока.

Эта опция позволяет устанавливать позиционные параметры

при вызове интерактивного командного интерпретатора.

-D

Список всех строк в двойных кавычках с префиксом $

выдается в стандартный выходной поток. Это строки,

которые необходимо перевести на соответствующий язык, если

текущая локаль отличается от C или POSIX. При этом неявно

предполагается опция -n; никакие команды выполняться не будут.

--

Пара дефисов (--) обозначает конец опций и отключает их дальнейшую

обработку. Любые аргументы после -- рассматриваются как имена файлов

и аргументы. Аргумент - эквивалентен --.

Командный интерпретатор bash также интерпретирует несколько

многосимвольных опций. Эти опции, чтобы они были распознаны, должны

указываться в командной строке перед односимвольными опциями.

--dump-po-strings

Аналогична опции -D, но результат выдается в формате файла GNU

gettext po (portable object - переносимый объект).

--dump-strings

Аналогична опции -D.

--help

Выдает в стандартный выходной поток сообщение об использовании и

успешно завершает работу.

--login

Заставляет bash работать так, как если бы он был вызван в качестве

начального командного интерпретатора

(см. "ВЫЗОВ" ниже).

--noediting

Не использует библиотеку GNU readline для чтения командных строк в

интерактивном режиме.

--noprofile

Не читает ни общесистемный файл начального запуска

/etc/profile, ни любой из персональных файлов инициализации

пользователя ~/.bash_profile, ~/.bash_login или ~/.profile.

По умолчанию, bash читает эти файлы при вызове в качестве

начального командного интерпретатора (см. "ВЫЗОВ" ниже).

--norc

Не читает и не выполняет персональный файл инициализации

~/.bashrc, если командный интерпретатор работает интерактивно. Эта опция

по умолчанию включена, если интерпретатор вызван как sh.

--posix

Изменяет на стандартное поведение bash в тех случаях, когда оно

отличается от предполагаемого стандартом POSIX 1003.2.

--rcfile файл

Выполняет команды из указанного файла вместо стандартного персонального

файла инициализации ~/.bashrc, если командный интерпретатор работает

интерактивно (см. "ВЫЗОВ" ниже).

--restricted

Командный интерпретатор становится ограниченным

(см. "ОГРАНИЧЕННЫЙ КОМАНДНЫЙ ИНТЕРПРЕТАТОР" ниже).

--verbose

Аналогична опции -v.

--rpm-requires

Создаёт список файлов, необходимых для выполнения сценария оболочки. Это подразумевает наличие '-n' и имеет те же ограничения, как и проверка ошибок во время компиляции; обратные кавычки, []-проверки и тождества не подлежат анализу, таким образом некоторые зависимости могут оказаться пропущены.

--version

Выдает информацию о версии данного экземпляра bash в стандартный выходной поток

и успешно завершает работу.

## АРГУМЕНТЫ
Если после обработки опций остались аргументы и не указаны опции

-c или -s,

первый аргумент считается именем файла, содержащего

команды интерпретатора. Если bash вызван таким образом, параметр $0

устанавливается равным имени файла, а значениями позиционных параметров

становятся другие аргументы. Командный интерпретатор bash читает и

выполняет команды из этого файла, а затем завершает работу. Статусом

выхода bash является статус выхода последней команды, выполненной в сценарии.

Если ни одна команда не выполнена, статус выхода - 0.

## ВЫЗОВ
Начальный командный интерпретатор (login shell) - это интерпретатор,

первый символ нулевого аргумента которого является дефисом (-) или

который запущен с опцией --login.

Интерактивным является командный интерпретатор, стандартный входной и

выходной потоки которого подключены к терминалам (что определяется

с помощью функции isatty(3)), или запущенный

с опцией -i. Переменная

среды PS1 устанавливается и флаги ($-) включают i, только если bash является

интерактивным интерпретатором, что позволяет проверить это в файле

начального запуска или в сценарии командного интерпретатора.

Следующие абзацы описывают, как bash выполняет свои файлы начального

запуска. Если любой из этих файлов существует, но не может быть

прочитан, bash выдает сообщение об ошибке. Символы тильды (~)

в именах файлов заменяются так, как описано в подразделе

"Замена тильды" раздела

"ЗАМЕНЫ".

При вызове bash как интерактивного начального командного интерпретатора,

или как неинтерактивного интерпретатора с опцией

--login, он сначала

читает и выполняет команды из файла /etc/profile, если этот файл существует.

После прочтения этого файла, он последовательно ищет файлы ~/.bash_profile,

~/.bash_login и ~/.profile, читает и выполняет команды из первого же из

них, который существует и доступен на чтение. Опция --noprofile может

использоваться при запуске командного интерпретатора, чтобы отменить

это действие.

При завершении работы в качестве начального командного интерпретатора

bash читает и выполняет команды в файле ~/.bash_logout, если он существует.

При запуске интерактивного командного интерпретатора, не являющегося

начальным, bash читает и выполняет команды из файла ~/.bashrc, если

он существует. Это действие можно отменить с помощью

опции --norc.

Опция --rcfile файл заставляет bash

читать и выполнять команды из указанного файла вместо ~/.bashrc.

При неинтерактивном запуске bash, например, для выполнения сценария,

командный интерпретатор ищет в среде переменную BASH_ENV,

получает ее значение и использует его в качестве имени файла, который

необходимо прочитать и выполнить. bash ведет себя так, как

если бы была выполнена следующая команда:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

но при поиске имени файла не используется значение переменной PATH.

Если bash вызван с именем sh, он пытается, насколько это возможно,

имитировать поведение при запуске старых версий интерпретатора sh,

соответствуя при этом стандарту POSIX. При вызове в качестве

интерактивного начального командного интерпретатора или

неинтерактивного, но с опцией --login, он сначала пытается читать и

выполнять команды последовательно из файлов /etc/profile и ~/.profile.

Для отмены этого действия можно использовать

опцию --noprofile. При вызове

в качестве интерактивного командного интерпретатора с именем

sh, bash ищет переменную среды ENV, получает ее значение, если оно задано,

и использует это значение в качестве имени файла, который необходимо

прочитать и выполнить. Поскольку интерпретатор, вызванный как sh, не

пытается читать и выполнять команды в других файлах начального запуска,

опция --rcfile не действует. Неинтерактивный командый интерпретатор,

вызванный с именем sh, не пытается читать и выполнять никакие файлы начального

запуска. При вызове по имени sh, командный интерпретатор bash входит в режим

posix после прочтения файлов начального запуска.

При запуске bash в режиме posix, например, с помощью опции командной строки

--posix, он следует стандарту POSIX при работе с файлами начального запуска.

В этом режиме интерактивные командные интерпретаторы

берут значение переменной среды ENV, читают и выполняют команды из

соответствующего файла. Никакие другие файлы начального

запуска не читаются.

Командный интерпретатор bash пытается определить, не запущен ли он

демоном удаленного командного интерпретатора, обычно, rshd. Если

оказывается, что bash запущен демоном rshd, он читает и выполняет

команды из файла ~/.bashrc, если этот файл существует и доступен

на чтение. Командный интерпретатор bash так не делает, если запущен

как sh. Для отмены этого действия можно использовать опцию

--norc, а с помощью опции

--rcfile можно заставить читать другой файл,

но обычно демон rshd не задает эти опции командному интерпретатору и не

позволяет их указать.

Если командный интерпретатор запущен с эффективным идентификатором

пользователя (группы), не совпадающим с реальным идентификатором

пользователя (группы), и не указана опция -p, файлы

начального запуска не читаются, функции командного интерпретатора не

наследуются из среды, переменная SHELLOPTS, если она задана в среде,

игнорируется, а эффективный идентификатор пользователя устанавливается

равным реальному. Если при вызове задана опция -p,

файлы начального запуска

тоже не читаются, но эффективный идентификатор пользователя не сбрасывается.

## ОПРЕДЕЛЕНИЯ
В оставшейся части документа используются следующие термины.

пробел

Символ пробела или символ табуляции.

слово

Последовательность символов, рассматриваемая командным интерпретатором

как единое целое. Также называется лексемой (token).

имя

Слово, состоящее только из алфавитноцифровых символов и символов подчеркивания,

и начинающееся с буквы или символа подчеркивания. Также

называется идентификатором.

метасимвол

Символ, разделяющий слова, если он не замаскирован. Один из следующих

символов:

| & ; ( ) < > пробел табуляция

управляющий оператор

Лексема, выполняющая функцию управления. Это один из следующих символов:

|| & && ; ;; ( ) | <перевод строки>

## ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА
Зарезервированными являются слова, имеющие специальное значение для

командного интерпретатора. Следующие слова распознаются как

зарезервированные, если не замаскированы и являются либо первым словом

простой команды (см. "СИНТАКСИС КОМАНД" ниже),

либо третьим словом команды case или

for:

! case do done elif else

esac fi for function if in

select then until while { }

time [[ ]]

## СИНТАКСИС КОМАНД

### Простые команды
Простая команда - это завершающаяся управляющим оператором

последовательность необязательных присваиваний значений переменным,

после которых идут слова, разделенные пробелами, и

перенаправления потоков. Первое слово задает команду, которую

надо выполнить. Оставшиеся слова передаются как аргументы вызванной

команде.

Возвращаемым значением простой команды является ее

статус выхода, или 128+n, если команда завершена сигналом n.

### Конвейеры
Конвейер - это последовательность одной или более команд,

разделенных символом |. Конвейер имеет следующий формат:

[time [-p]] [ ! ] команда [ | команда2 ... ]

Стандартный выходной поток команды связывается со стандартным входным

потоком команды2. Эта связь выполняется раньше, чем любые перенаправления,

задаваемые командой (см. "ПЕРЕНАПРАВЛЕНИЕ" ниже).

Если перед конвейером указано зарезервированное слово !,

статус выхода такого конвейера является логическим отрицанием

статуса выхода последней команды. В противном случае, статус

выхода конвейера совпадает со статусом выхода последней команды.

Прежде, чем возвращать значение, командный интерпретатор ждет завершения

всех команд в конвейере.

Если перед конвейером идет зарезервированное слово time,

после завершения конвейера выдается общее, пользовательское и

системное время, потраченное на его выполнение.

Опция -p изменяет

формат вывода на задаваемый стандартом POSIX. Переменная

TIMEFORMAT может задавать строку формата выдачи информации о времени;

см. описание переменной TIMEFORMAT в разделе

"Переменные командного интерпретатора" ниже.

Каждая команда в конвейере выполняется как отдельный процесс

(т.е. в порожденном интерпретаторе).

### Списки
Список - это последовательность одного или более конвейеров,

разделенных одним из операторов ;, &, &&

или ||, и не обязательно завершающаяся одним из операторов

;, & или <перевод строки>.

Из этих операторов списка && и || имеют равный приоритет, причем

больший, чем ; и &, тоже имеющие равный приоритет.

Если команда завершается управляющим оператором &, интерпретатор

выполняет команду в фоновом режиме в порожденном интерпретаторе.

Командный интерпретатор не ждет завершения команды, а статус

выхода в этом случае - 0. Команды, разделенные ; выполняются

последовательно; командный интерпретатор ждет поочередно завершения каждой

из команд. Статус возврата списка в этом случае совпадает со

статусом возврата последней выполненной команды.

Управляющие операторы && и || обозначают, соответственно, И-списки

и ИЛИ-списки. И-список имеет вид

команда && команда2

Команда2 выполняется только и если только команда вернула статус

выхода ноль.

ИЛИ-список имеет вид

команда || команда2

Команда2 выполняется только и если только команда вернула ненулевой

статус выхода. И- и ИЛИ-списки возвращают статус последней команды,

выполненной в списке.

### Составные команды
Составными называют следующие команды:

(список)

Список выполняется в порожденном командном интерпретаторе.

Присваивания переменным и встроенные команды, влияющие на

среду командного интерпретатора, не действуют после завершения

команды. Статусом возврата является статус выхода списка.

{ список; }

Список просто выполняется в среде текущего командного интерпретатора.

Список должен завершаться переводом строки или точкой с запятой.

Эту команду называют командой группировки. Статусом возврата

является статус выхода списка.

((выражение))

Выражение вычисляется в соответствии с правилами, описанными ниже

в разделе

"ВЫЧИСЛЕНИЕ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ". Если выражение

имеет ненулевое значение, статус возврата равен 0; в противном

случае - 1. Эта конструкция эквивалентна конструкции let "выражение".

[[ выражение ]]

Возвращает статус 0 или 1 в зависимости от значения указанного

условного выражения. Выражения состоят из компонентов, описанных

ниже в разделе "УСЛОВНЫЕ ВЫРАЖЕНИЯ".

Деление слов и подстановка

имен файлов в словах между [[ и ]] не выполняется;

выполняется замена тильды, подстановка значений параметров и переменных,

арифметическая подстановка, подстановка результатов команд и

подстановка процессов, а также удаление кавычек.

При использовании операторов == и != строка справа оператора

считается образцом и сопоставляется по правилам, описанным ниже в

подразделе "Сопоставление с образцом". Возвращается значение

0 если строка, соответственно, сопоставляется и не сопоставляется

с образцом, и 1 в противном случае. Любая часть образца может быть

взята в кавычки, чтобы сопоставление с ней шло буквально.

Выражения можно комбинировать с помощью следующих операторов,

перечисленных в порядке снижения приоритета:

( выражение )

Возвращает значение выражения. Круглые скобки можно использовать

для изменения обычного приоритета операторов.

! выражение

Истинно, если выражение ложно.

выражение1 && выражение2

Истинно, если истинны оба выражения, выражение1 и

выражение2.

выражение1 || выражение2

Истинно, если истинно выражение1 или выражение2.

Операторы && и || не вычисляют выражение2, если

значения выражения1 достаточно для определения возвращаемого

значения всего условного выражения.

for имя [ in список_слов ] ; do список ; done

Выполняются подстановки в списке_слов после in, в результате чего

получается список элементов. Переменная с соответствующим

именем последовательно получает значение каждого элемента этого

списка, и каждый раз выполняется список. Если слово in не указано,

команда for выполняет список для каждого установленного позиционного

параметра (см. раздел "ПАРАМЕТРЫ" ниже). Сатусом возврата

является статус выхода последней выполненной команды. Если в

результате подстановок элементов списка_слов после in получается

пустой список, команды не выполняются и возвращается статус 0.

select имя [ in список_слов ] ; do список ; done

Выполняются подстановки в списке_слов после in, в результате чего

получается список элементов. Набор полученных после подстановки

слов выдается в стандартный поток ошибок, причем перед каждым

элементом выдается его порядковый номер. Если слово in не указано,

выдаются установленные позиционные параметры

(см. раздел "ПАРАМЕТРЫ" ниже). Затем выдается приглашение PS3

и читается строка со стандартного входного потока. Если эта строка

содержит число, соответствующее одному из выданных слов, то переменная

имя получает его значение. Если строка пустая, слова и приглашение

выдаются снова. Если прочитан символ конца файла (EOF), команда

заврешается. При вводе любого другого значения переменная имя

получает пустое значение. Прочитанная строка сохраняется в

переменной REPLY. Список выполняется после каждого выбора, пока не

будет выполнена команда break или return. Статусом выхода

команды select является статус выхода последней команды в списке,

или 0, если ни одна команда не была выполнена.

case слово in [ ( образец [ | образец ] ... ) список ;; ] ... esac

Команда case сначала подставляет значение слова и пытается

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

правила сопоставления, что и для имен файлов (см. подраздел "Подстановка

имен файлов"). Если найден сопоставляющийся образец,

выполняется соответствующий список. После нахождения первого

сопоставления дальнейшее сопоставление не выполняется и команда

завершается. Статус выхода равен 0, если ни один образец не сопоставился.

В противном случае, он равен статусу выхода последней выполненной

команды из соответствующего списка.

if список; then список; [ elif список; then список; ] ... [ else список; ] fi

Выполняется список после if. Если его статус выхода - 0,

выполняется список после then. В противном случае, выполняется

последовательно список в очередной конструкции elif, и если его

статус выхода - 0, выполняется соответствующий список после then

и команда завершается. Если все конструкции elif проверены

и ни один из списков не вернул статус 0, выполняется список после else,

если эта конструкция задана. Статусом выхода является

статус выхода последней выполненной команды или 0, если ни одно из условий

не оказалось истинным.

while список; do список; done

until список; do список; done

Команда while циклически выполняет список после do, пока

последняя команда списка возвращает статус выхода 0.

Команда until идентична команде while, но условие завершения -

противоположно; список после do выполняется, пока последняя команда

списка возвращает ненулевой статус выхода. Статусом выхода команд

while и until является статус выхода последней выполненной

команды списка или 0, если ни одна команда не выполнена.

[ function ] имя () { список; }

Эта команда определяет функцию с указанным именем. Тело

функции образует список команд между фигурными скобками

{ и }. Этот список выполняется каждый раз, когда

имя функции указывается как имя простой команлы. Статусом выхода функции

является статус выхода последней команды, выполненной в теле

функции. (См. раздел "ФУНКЦИИ" ниже.)

## КОММЕНТАРИИ
В неинтерактивном командном интерпретаторе или в интерактивном с

включенной опцией interactive_comments встроенной команды

shopt (см. раздел

"ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже), слово,

начинающиеся символом #, влечет игнорирование этого слова и последующих

символов в строке. Интерактивный командный интерпретатор с не включенной

опцией interactive_comments не допускает использования комментариев.

Опция interactive_comments по умолчанию включается в интерактивных командных

интерпретаторах.

## МАСКИРОВКА
Маскировка (quoting) используется для отмены специального значения для

командного интерпретатора определенных символов или слов.

Маскировку можно использовать для отмены специфической обработки специальных

символов, для предотвращения распознавания зарезервированных слов, а также

для предотвращения подстановки параметров.

Каждый из метасимволов, перечисленных выше в разделе "ОПРЕДЕЛЕНИЯ",

имеет специальное значение для командного интерпретатора и должен

маскироваться, если используется буквально. Имеется три механизма маскировки:

символ маскировки (escape character), одиночные кавычки и двойные кавычки.

Незамаскированная обратная косая черта является символом маскировки. Он

требует использовать следующий за ним символ (за исключением перевода строки)

буквально. Если введена пара символов

\

<перевод строки> и сама обратная

косая не замаскирована, эта пара обрабатывается как признак продолжения строки

(т.е. она удаляется из входного потока и, по сути, игнорируется).

Все символы в одиночных кавычках используются буквально. Символ одиночной

кавычки (апостроф) не должен указываться между одиночными кавычками, даже если

он предваряется обратной косой.

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

$, ` и

\

Обратная косая имеет специальное значение только если после нее идет один

из следующих символов: $, `, ",

\

или <перевод строки>. Двойную кавычку можно

указывать в двойных кавычках, замаскировав обратной косой.

Специальные параметры * и @ имеют специальное значение при указании в двойных

кавычках (см. раздел "ПАРАМЕТРЫ" ниже).

Слова вида $'строка' обрабатываются особым образомy. Слово заменяется

строкой, в которой предваренные обратной косой символы заменяются в соответствии

со стандартом ANSI C. Управляющие последовательности, начинающиеся с обратной

косой, декодируются следующим образом:

\a

тревога (звонок)

\b

забой

\e

управляющий символ

\f

прогон страницы (form feed)

\n

перевод строки (new line)

\r

carriage return (возврат каретки)

\t

табуляция

\v

вертикальная табудяция

\\

обратная косая

\'

одиночные кавычки

\nnn

символ, ASCII-код которого совпадает с восьмеричным значением nnn (от одной до трех цифр)

\xHH

символ, ASCII-код которого совпадает с шестнадцатеричным значением nnn

(от одной до трех цифр)

\cx

символа control-x

Преобразованный результат помещается в одиночные кавычки, как если бы

символа доллара просто не было.

Строка в двойных кавычках, перед которой идет символ доллара ($), будет

преобразована в соответствии с текущей локалью. Если текущая локаль -

C или POSIX, символ доллара игнорируется. Если строка преобразована

и заменена, результат помещается в двойные кавычки.

## ПАРАМЕТРЫ
Параметр - это сущность, хранящая значение. Это может быть

имя, число или один из специальных символов, перечисленных ниже в

разделе "Специальные параметры". В контексте

интерпретатора, переменная - это параметр, обозначаемый именем.

Параметр устанавливается, если ему присвоено значение. Пустая строка является

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

удалена только с помощью встроенной команды unset

(см. раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже).

Значение переменной может быть присвоено с помощью оператора вида

имя=[значение]

Если значение не задано, переменной присваивается пустая строка. Во всех

значениях выполняется замена тильды, подстановка значений параметров и

переменных, обработка строк, подстановка результатов выполнения команд,

арифметические вычисления и удаление символов маскировки (см.

раздел "ОБРАБОТКА" ниже). Если для переменной

установлен атрибут целочисленная (integer)

(см. declare в разделе

"ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА"

ниже), ее значение арифметически вычисляется, даже если арифметическое

вычисление $((...)) не указано явно (см. подраздел

"Арифметическое вычисление" ниже). Разбиение на слова не выполняется, за исключением

значения "$@", как объяснено ниже в подразделе

"Специальные параметры".

Подстановка имен файлов не выполняется.

### Позиционные параметры
Позиционный параметр - это параметр, обозначаемый одной или несколькими

цифрами, кроме цифры 0. Позиционным параметрам значения присваиваются на

основе аргументов, переданных при вызове командного интерпретатора, и могут

быть переприсвоены с помощью встроенной команды set. Позиционным

параметрам нельзя присваивать значения с помощью операторов присваивания.

Позиционные параметры временно заменяются при выполнении функции командного

интерпретатора (см. раздел "ФУНКЦИИ" ниже).

Когда позиционный параметр состоит из нескольких цифр, его надо брать

в скобки (см. раздел "ОБРАБОТКА" ниже).

### Специальные параметры
Командный интерпретатор обрабатывает ряд параметров специальным образом.

Можно только ссылаться на значения этих параметров - присваивания им не

разрешены.

*

Заменяется позиционными параметрами, начиная с первого.

Когда такая замена выполняется в двойных кавычках, результат будет

одним словом, в котором значения параметров разделены первым символом

значения специальной переменной IFS. То есть, "$*" эквивалентно

"$1c$2c...", где c - первый символ значения переменной IFS. Если переменная

IFS не установлена, значения параметров разделяются пробелами. Если переменная

IFS имеет пустое значение, значения параметров просто конкатенируются, без

разделителей.

@

Заменяется позиционными параметрами, начиная с первого.

Когда такая замена выполняется в двойных кавычках, каждый параметр

заменяется отдельным словом. То есть, "$@" эквивалентно

"$1" "$2" ... Когда позиционных параметров нет, "$@"

и $@ заменяются пустой строкой (т.е. они просто удаляются).

\#

Заменяется десятичным значением количества позиционных параметров.

?

Заменяется статусом последнего выполненного в приоритетном режиме конвейера.

-

Заменяется флагами текущих опций, заданных при вызове, с помощью

встроенной команды set или установленных самим командным

интерпретатором (как, например, опция -i).

$

Заменяется идентификатором процесса командного интерпретатора.

В порожденном командном интерпретаторе, запущенном с помощью (), заменяется

идентификатором процесса основного интерпретатора, а не порожденного.

!

Заменяется идентификатором последнего процесса, запущенного в фоновом

(асинхронном) режиме.

0

Заменяется именем командного интерпретатора или сценария. Это значение

устанавливается при инициализации командного интерпретатора. Если

bash вызван с командным файлом, $0 будет установлен равным имени

этого файла. Если bash запущен с опцией -c,

$0 получает значение

первого аргумента после строки, которую надо выполнить, если он задан.

В противном случае, этот специальный параметр получает значение имени

файла, использованного для вызова bash, которое задается нулевым

аргументом.

_

При запуске командного интерпретатора устанавливается равным полному

имени файла (absolute file name) командного интерпретатора или выполняемого

сценария, переданного в списке аргументов. В последствии,

заменяется последним аргументом предыдущей команды, с учетом всех замен.

Также устанавливается равным полному имени файла каждой выполняемой внешней

команды и помещается в среду, экспортируемую для этой команды. При проверке

почты этот параметр содержит имя проверяемого файла почты.

### Переменные командного интерпретатора
Командный интерпретатор устанавливает следующие переменные:

PPID

Идентификатор родительского процесса для командного интерпретатора.

Эта переменная доступна только для чтения.

PWD

Текущий рабочий каталог, установленный с помощью команды cd.

OLDPWD

Предыдущий рабочий каталог, который был установлен с помощью команды

cd.

REPLY

Устанавливается равной значению, прочитанному встроенной командой

read, при вызове ее без аргументов.

UID

Идентификатор текущего пользователя - устанавливается при запуске командного

интерпретатора. Эта переменная доступна только для чтения.

EUID

Эффективный идентификатор текущего пользователя - устанавливается

при запуске командного интерпретатора. Эта переменная доступна

только для чтения.

GROUPS

Переменная-массив, содержащая список групп, в которые входит текущий

пользователь. Эта переменная доступна только для чтения.

BASH

Полное имя файла, использованное для вызова данного экземпляра bash.

BASH_VERSION

Строка, описывающая версию данного экземпляра bash.

BASH_VERSINFO

Доступный только для чтения массив, элементы которого содержат информацию

о версии для данного экземпляра bash. Элементы массива имеют следующие

значения:

BASH_VERSINFO[0]

Главный номер версии (релиз).

BASH_VERSINFO[1]

Второстепенный номер версии (версия).

BASH_VERSINFO[2]

Уровень исправлений.

BASH_VERSINFO[3]

Версия сборки.

BASH_VERSINFO[4]

Статус релиза (например, beta1).

BASH_VERSINFO[5]

Значение переменной MACHTYPE.

SHLVL

Увеличивается на 1 при каждом запуске порожденного интерпретатора bash.

RANDOM

При каждом обращении к этому параметру генерируется случайное число

от 0 до 32767. Конкретная последовательность случайных чисел

может быть проинициализирована путем присваивания значения переменной

RANDOM. Если переменная RANDOM удаляется с помощью

unset, она

теряет свои специальные свойства, даже если в дальнейшем переустанавливается.

SECONDS

При каждом обращении к этому параметру возвращается количество секунд,

прошедших с момента вызова данного командного интерпретатора. Если переменной

SECONDS присваивается значение, при последующем обращении будет получено

количество секунд, прошедшее с момента присваивания, плюс присвоенное

значение. Если переменная SECONDS удаляется

с помощью unset, она

теряет свои специальные свойства, даже если в дальнейшем переустанавливается.

LINENO

При каждом обращении к этому параметру командный интерпретатор

подставляет десятичное число, представляющее порядковый номер текущей

строки (начиная с 1) в сценарии или функции. При вызове не из

сценария или функции, не гарантируется подстановка осмысленного значения.

Если переменная LINENO удаляется

с помощью unset, она

теряет свои специальные свойства, даже если в дальнейшем переустанавливается.

HISTCMD

Исторический номер команды, или индекс текущей команды в списке выполненных

команд. Если переменная HISTCMD удаляется

с помощью unset, она

теряет свои специальные свойства, даже если в дальнейшем переустанавливается.

DIRSTACK

Переменная-массив (см. раздел "Массивы" далее),

в которой хранится текущее содержимое

стека каталогов. Каталоги находятся в стеке в том же порядке, в котором

выдаются встроенной командой dirs.

Путем присваивания элементам этого

массива можно изменять каталоги, уже находящиеся в стеке, но для

добавления и удаления каталогов надо использовать встроенные команды

pushd и popd.

Присваивание значения этой переменной не меняет текущий каталог.

Если переменная DIRSTACK удаляется

с помощью unset, она

теряет свои специальные свойства, даже если в дальнейшем переустанавливается.

PIPESTATUS

Переменная-массив (см. раздел "Массивы" далее), содержащая список значений

статусов выхода процессов в последнем выполненном в приоритетном режиме

конвейере (который может состоять и всего из одной команды).

OPTARG

Значение последнего аргумента-опции, обработанного встроенной командной

getopts (см. раздел

"ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже).

OPTIND

Индекс следующего аргумента, который должен быть обработан встроенной

командой getopts (см. раздел

"ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже).

HOSTNAME

Автоматически устанавливается равной имени текущего хоста.

HOSTTYPE

Автоматически устанавливается равной строке, уникально описывающей тип

машины, на которой выполняется bash. Стандартное значение зависит от системы.

OSTYPE

Автоматически устанавливается равной строке, описывающей операционную систему,

на которой выполняется командный интерпретатор bash. Стандартное значение

зависит от системы.

MACHTYPE

Автоматически устанавливается равной строке, полностью описывающей тип системы,

на которой выполняется bash, в стандартном для GNU формате

процессор-компания-система. Стандартное значение зависит от системы.

SHELLOPTS

Список установленных опций командного интерпретатора через двоеточие.

Каждое слово в списке - допустимый аргумент для опции -o встроенной

команды set (см. раздел

"ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже).

Опции, упоминающиеся в списке SHELLOPTS, совпадают с выдаваемыми

как установленные командой set -o.

Если эта переменная экспортирована в среду

при запуске командного интерпретатора bash, все упомянутые в списке

опции будут установлены до чтения любых файлов начального запуска.

Эта перменная доступна только для чтения.

Следующие переменные используются командным интерпретатором. В некоторых

случаях bash присваивает переменным стандартные значения; эти случаи указаны

ниже.

IFS

Внутренний разделитель полей (Internal Field Separator), используемый

для выделения слов после всех подстановок и для разбиения на слова строк,

прочитанных с помощью встроенной команды read.

Стандартное значение - "<пробел><табуляция><перевод строки>".

PATH

Путь поиска команд. Это список каталогов через двоеточие, в которых

командный интерпретатор ищет команды

(см. раздел "ВЫПОЛНЕНИЕ КОМАНД"

ниже). Стандартный путь поиска зависит от системы и задается администратором,

устанавливающим bash. Типичное значение:

"/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.".

HOME

Начальный каталог текущего пользователя; стандартный аргумент для встроенной

команды cd. Значение этой переменной также используется

при замене тильды.

CDPATH

Путь поиска для команды cd. Это список каталогов через

двоеточие, в которых командный интерпретатор ищет целевые каталоги, указанные

по имени в команде cd. Пример возможного

значения - ".:~:/usr".

BASH_ENV

Если этот параметр установлен при выполнении командным интерпретатором

bash сценария, его значение интерпретируется как имя файла, содержащего команды

инициализации интерпретатора, аналогично ~/.bashrc.

В значении BASH_ENV перед интерпретацией выполняется подстановка значений

параметров, подстановка результатов выполнения команд и арифметические

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

файла.

MAIL

Если этот параметр установлен равным имени файла

и не установлена переменная MAILPATH, bash информирует пользователя

о получении электронной почты в указанный файл.

MAILCHECK

Задает частоту проверки (в секундах) электронной почты командным

интерпретатором bash. Стандартное значение - 60 секунд.

Когда приходит время проверять наличие новой почты, командный

интерпретатор делает это перед выдачей первичного приглашения.

Если эта переменная не установлена, проверка почты командным

интерпретатором отключается.

MAILPATH

Список имен файлов через двоеточие, в которых нужно проверять наличие

новых почтовых сообщений. Можно задавать сообщение, которое должно

выдаваться при поступлении почты в конкретный файл, отделяя сообщение от

имени файла вопросительным знаком (?). В тексте этого

сообщения метасимвол $_ заменяется именем текущего файла почты. Например:

MAILPATH='/usr/spool/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"'

Командный интерпретатор bash поддерживает стандартное значение

для этой переменной, но используемое при этом местонахождение файлов почты

пользователя зависит от системы (например, /usr/spool/mail/$USER).

PS1

Значение этого параметра обрабатывается (см.

раздел "ПРИГЛАШЕНИЯ" ниже) и

используется для установки строки первичного приглашения. Стандартное

значение - "\s-\v\$ ".

PS2

Значение этого параметра обрабатывается, как и PS1, и

используется для установки строки вторичного приглашения.

Стандартное значение - "> ".

PS3

Значение этого параметра используется в качестве

приглашения для команды select

(см. раздел "СИНТАКСИС КОМАНД" выше).

PS4

Значение этого параметра обрабатывается, как и PS1, и

выдается перед каждой командой, показываемой интерпретатором

bash в ходе трассировки выполнения. Первый символ PS4

повторяется необходимое количество раз, показывая уровень

вложенности. Стандартное значение - "+".

TIMEFORMAT

Значение этого параметра используется в качестве строки, задающей формат

выдачи информации о времени выполнения для конвейеров, перед которыми

задано зарезервированное слово time. Символ % начинает управляющую

последовательность, заменяемую значением времени или другой информацией.

Управляющие последовательности имеют следующие значения (в квадратных

скобках представлены необязательные части):

%%

Символ %.

%[p][l]R

Время выполнения, в секундах.

%[p][l]U

Количество секунд работы процессора в пользовательском режиме.

%[p][l]S

Количество секунд работы процессора в системном режиме.

%P

Процент использования процессора, вычисляемый как (%U + %S) / %R.

Необязательный параметр p - это цифра, задающая точность,

количество знаков (долей секунды) после запятой. Значение 0

отменяет выдачу долей секунды. Максимальная точность - три знака после запятой;

значения p больше 3 заменяются на 3. Если p не задано, используется значение 3.

Необязательный параметр l задает длинный формат, включая минуты, в виде

MMmSS.FFs. Значение праметра p определяет, включаются доли секунды или нет.

Если эта переменная не установлена, bash действует так, как если бы

она имела значение $'\nreal\t%3lR\nuser\t%3lU\nsys%3lS'. Если установлено

пустое значение, информация о времени выполнения не выдается.

При выводе строки по формату добавляется перевод строки.

HISTSIZE

Количество команд, которые необходимо запоминать в списке истории (см.

раздел "ИСТОРИЯ КОМАНД" ниже). Стандартное значение - 500.

HISTFILE

Имя файла, в котором сохраняется история команд (см. раздел

"ИСТОРИЯ КОМАНД" ниже).

Стандартное значение - ~/.bash_history.

Если эта переменная не установлена, история команд не сохраняется при

завершении работы интерактивного командного интерпретатора.

HISTFILESIZE

Максимальное количество строк, содержащееся в файле истории.

Если этой переменной присвоено значение, файл истории, при необходимости,

усекается, и будет содержать не больше, чем указанное количество строк.

Стандартное значение - 500. Файл истории также усекается до этого размера после

записи при выходе из интерактивного командного интерпретатора.

OPTERR

Если имеет значение 1, bash показывает сообщения об ошибках, выдаваемые

встроенной командой getopts (см. раздел

"ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА"

ниже). Переменная OPTERR инициализируется значением 1 при каждом вызове

командного интерпретатора или выполнении сценария.

LANG

Используется для определения локали для всех категорий, не заданных явно с

помощью переменной, имя которой начинается с LC_.

LC_ALL

Эта переменная переопределяет значение переменной LANG и всех остальных

переменных LC_, задающих категорию локали.

LC_COLLATE

Эта переменная задает порядок сортировки, используемый при сортировке

полученных по шаблону имен файлов, и определяет интерпретацию диапазонов,

классов эквивалентостей и правила сравнения символов для подстановки имен

файлов и сопоставления с образцом.

LC_CTYPE

Эта переменная определяет интерпретацию символов и принадлежность символов

к определенному классу для подстановки имен файлов и сопоставления с образцом.

LC_MESSAGES

Эта переменная определяет локаль, используемую для обработки строк в двойных

кавычках, перед которыми указан символ $.

PROMPT_COMMAND

Если значение задано, оно выполняется как команда перед выдачей каждого

первичного приглашения.

IGNOREEOF

Управляет действием командного интерпретатора при получении символа

конца файла (EOF) как единственного символа в строке. Если

эта переменная установлена, ее значение интерпретируется как количество

подряд идущих символов EOF, с которых должна начинаться строка, чтобы в

результате работа командного интерпретатора bash завершилась. Если

переменная существует, но не имеет числового значения или не имеет значения вообще,

по умолчанию используется значение 10. Если эта переменная не существует,

EOF означает конец входных данных для командного интерпретатора.

TMOUT

Если установлено значение больше нуля, оно интерпретируется как количество

секунд ожидания ввода после выдачи первичного приглашения. Командный

интерпретатор bash завершает работу по истечении этого времени, если не

введена команда.

FCEDIT

Задает стандартный редактор для встроенной команды fc.

FIGNORE

Список суффиксов через двоеточие, которые необходимо игнорировать при

завершении имен файлов (см. раздел

"БИБЛИОТЕКА READLINE" ниже). Имя файла,

суффикс которого совпадает с одним из указанных в FIGNORE

значений, исключается из списка соответствующих имен файлов.

Пример значения - ".o:~".

GLOBIGNORE

Список шаблонов через двоеточие, задающих набор имен файлов, которые

надо игнорировать при подстановке имен. Если имя файла, соответствующее шаблону,

также соответствует одному из шаблонов в GLOBIGNORE, оно удаляется

из списка соответствующих.

INPUTRC

Имя файла начального запуска readline, переопределяющего стандартные

установки в файле ~/.inputrc (см. раздел

"БИБЛИОТЕКА READLINE" ниже).

HISTCONTROL

Если имеет значение ignorespace, строки, начинающиеся символом

пробела, не попадают в список выполненных команд. Если имеет значение

ignoredups, строки, совпадающие с последней выполненной командой, в список

выполненных команд не попадают. Значение ignoreboth сочетает действие

обеих представленных опций. Если переменной нет или она имеет какое-то другое

значение, кроме перечисленных выше, все строки, прочитанные синтаксическим

анализатором, сохраняются в списке истории, с учетом значения переменной

HISTIGNORE. Действие этой переменной переопределяется переменной

HISTIGNORE. Вторая и следующие строки многострочной составной команды не

проверяются, и добавляются в список истории независимо от значения

HISTCONTROL.

HISTIGNORE

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

командных строк в списке истории. Каждый шаблон привязывается к началу

строки и должен задавать всю строку ('*' неявно не добавляется). Каждый

шаблон сравнивается со строкой после проверок, задаваемых

переменной HISTCONTROL. Кроме обычных символов сопоставления с образцом

в командном интерпретаторе, символ '&' сопоставляется с предыдущей строкой

в списке истории. Символ '&' можно экранировать с помощью обратной косой. Перед

сопоставлением обратная косая убирается. Вторая и последующая строки составной

многострочной команды не проверяются и добавляются в список истории независимо от

значения переменной HISTIGNORE.

histchars

Два или три символа, управляющих подстановкой и разбиением на лексемы

уже выполненных команд (см. раздел

"ПОДСТАНОВКА КОМАНД ИЗ СПИСКА ВЫПОЛНЕННЫХ"

ниже). Первый символ - это символ подстановки из списка, который

означает начало работы со списком истории. Обычно это символ '!'.

Второй символ - это символ быстрой подстановки, используемый для быстрого

повторения предыдущей введенной команды, с подстановкой указанной строки вместо

другой, заданной в этой команде. По умолчанию используется символ '^'.

Необязательный третий символ - это символ, указывающий, если является

первым символом слова, что остаток строки - это комментарий. Обычно в этом

качестве используется символ '#'. Символ комментария для списка истории

приводит к отказу от подстановки из истории для оставшихся слов в командной

строке. Он не обязательно приводит к обработке синтаксическим анализатором

оставшейся части строки как комментария.

HOSTFILE

Содержит имя файла того же формата, что и файл /etc/hosts, который

будет читаться при необходимости подстановки имени хоста. Этот файл

можно менять интерактивно; при следующей попытке подстановки имени

хоста bash добавит содержимое нового файла к уже существующей базе данных.

auto_resume

Эта переменная управляет взаимодействием командного интерпретатора с

пользователем и средствами управления заданиями. Если она установлена,

простые команды из одного слова и без перенаправлений рассматриваются

как указатели возможного возобновления существующих остановленных заданий.

Неоднозначность не допускается; если с введенной строки начинается

более одного задания, выбирается последнее по времени приостановки задание.

Имя остановленного задания, в этом контексте, - это командная строка,

использовавшаяся для его запуска. Если эта переменная имеет значение

exact, введенная строка должна точно совпадать с именем остановленного задания;

Если же задано значение substring, введенная строка должна быть

подстрокой имени остановленного задания. Это аналогично по возможностям

идентификатору задания %?

(см. раздел "УПРАВЛЕНИЕ ЗАДАНИЯМИ" ниже).

Если установлено любое другое

значение, введенная строка должна быть префиксом имени остановленного

задания; это аналогично по возможностям идентификатору задания %.

### Массивы
Командный интерпретатор bash поддерживает одномерные массивы.

Любая переменная может использоваться как массив; встроенная

процедура declare позволяет объявить массив явно.

Нет ограничения на рамер массива или требования непрерывности индексов. Массивы

индексируются целыми числами, начиная с нуля.

Массив создается автоматически при присваивании любой переменной значения

с помощью конструкции имя[индекс]=значение. Индекс обрабатывается как

арифметическое выражение, которое должно иметь неотрицательное значение.

Для явного объявления массива используется команда declare -a имя

(см. раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА"

ниже). Конструкция declare -a имя[индекс] также поддерживается;

индекс просто игнорируется. Для переменной типа массив можно задать атрибуты

с помощью встроенных команд declare и

readonly. Атрибут применяется ко всем элементам массива.

Присваивания массивам выполняются с помощью конструкций вида

имя=(значение1 ... значениеn), где каждое значение имеет вид

[индекс]=строка. Обязательно задавать только строку. Если необязательные

квадратные скобки и индекс указаны, присваивание выполняется элементу с

соответствующим индексом; в противном случае, в качестве индекса элемента

используется индекс последнего элемента, которому было присвоено значение,

плюс один. Индексация начинается с нуля. Эту же конструкцию присваивания можно

использовать и во встроенной команде declare.

Значения отдельным элементам массива присваиваются с помощью представленной

выше конструкции имя[индекс]=значение.

На любой элемент массива можно сослаться с помощью конструкции

${имя[индекс]}. Фигурные скобки необходимы, чтобы избежать конфликтов при

подстановке имен файлов. Если в качестве индекса указан символ @ или *,

слово заменяется всеми элементами массива с указанным именем. Эти индексы

интерпретируются по-разному только если слово указано в двойных кавычках.

Если слово указано в двойных кавычках, конструкция ${имя[*]} заменяется

одним словом, значение которого строится как значения каждого элемента

массива, разделенные первым символом из значения переменной среды IFS, а

конструкция ${имя[@]} заменяет каждый элемент массива имя отдельным словом.

Когда массив пустой, ${имя[@]} заменяется пустой строкой. Это аналогично замене

специальных параметров * и @ (см.

подраздел "Специальные параметры" выше).

Конструкция ${#имя[индекс]} заменяется длиной элемента ${имя[индекс]}.

Если в качестве индекса указан символ * или @, подставляется количество элементов

массива. Ссылка на переменную-массив без индекса эквивалентна ссылке на

элемент с индексом ноль.

Для уничтожения массивов используется встроенная команда

unset.

Команда unset имя[индекс] уничтожает элемент массива с указанным индексом.

Команда unset name, где name - имя массива, или unset имя[индекс],

где индекс - * или @, удаляет весь массив.

Встроенные команды declare,

local и readonly

воспринимают опцию -a для указания массива.

Встроенная команда read воспринимает опцию -a

для присваивания массиву списка слов, прочитанных из станадартного

входного потока. Встроенные команды set и

declare выдают значения массивов

так, что их можно повторно использовать в присваиваниях.

## ЗАМЕНЫ
Замена выполняется в командной строке после разбиения ее на слова.

Выполняется семь видов замен: замена выражений в фигурных скобках,

замена тильды, подстановка значений переменных и параметров, подстановка

результатов выполнения команд, подстановка значений арифметических

выражений, разбиение слов и подстановка имен файлов.

Замена выполняется в следующем порядке: замена выражений в фигурных скобках,

замена тильды, подстановка значений переменных, параметров, арифметических

выражений и результатов выполнения команд (слева направо), разбиение слов

и подстановка имен файлов.

В системах, где это может поддерживаться, выполняется дополнительная замена -

подстановка процессов.

Только замена выражений в фигурных скобках, разбиение слов

и подстановка имен файлов может изменить количество слов в командной

строке; при других заменах одно слово просто заменяется другим. Единственное

исключение - подстановка "$@" и "${имя[@]}", как объяснялось выше

(см. раздел "ПАРАМЕТРЫ").

### Замена выражений в фигурных скобках
Замена выражений в фигурных скобках - это механизм генерации произвольных

строк. Он аналогичен подстановке имен файлов, но генерируемые имена

не обязательно должны существовать. Шаблоны в фигурных скобках имеют вид

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

скобках, после чего - необязательный суффикс. Префикс добавляется в начало

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

так (слева направо) строке добавляется суффикс.

Выражения в фигурных скобках могут быть вложенными. Результаты каждой замены не

сортируются; порядок слева направо сохраняется. Например, конструкция

a{d,c,b}e заменяется на 'ade ace abe'.

Замена выражений в фигурных скобках выполняется перед любыми другими заменами, и

в результате сохраняются все символы, имеющие специальное значение для других

замен. Эта замена - строго текстуальная. Командный интерпретатор bash никак

не учитывает контекст подстановки или текст в фигурных скобках.

Корректное выражение в фигурных скобках должно содержать незамаскированные

открывающую и закрывающую фигурную скобку и, по крайней мере, одну незамаскированную

запятую. Любое некорректное выражение в фигурных скобках остается неизменным.

Символ { или , может маскироваться обратной косой для предотвращения его

интерпретации на этапе замены выражений в фигурных скобках.

Эта конструкция обычно используется для сокращенной записи группы строк с

общим префиксом, более длинным чем в представленном выше примере:

mkdir /usr/local/src/bash/{old,new,dist,bugs}

или

chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

Замена выражений в фигурных скобках вносит небольшое рассогласование

с историческими версиями sh. Командный интерпретатор sh не рассматривает

открывающую и закрывающую фигурные скобки в слове специальным образом

и просто сохраняет их. Командный интерпретатор bash удаляет фигурные скобки

из слова при замене. Например, слово, введенное в sh как file{1,2},

остается без изменений. Это же слово заменяется парой слов

file1 file2 после замены выражения в фигурных скобках в bash.

Если требуется полная совместимость с sh, командный интерпретатор bash

надо запускать с опцией +B или отключать с помощью опции

+B команды set (см. раздел

"ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже).

### Замена тильды
Если слово начинается незамаскированным символом тильда (~),

все символы до первой незамаскированной косой черты (или все символы,

если незамаскированной косой черты в слове нет) считаются тильда-префиксом.

Если ни один из символов тильда-префикса не замаскирован, его символы после

тильды рассматриваются как возможное регистрационное имя. Если это

регистрационное имя представляет собой пустую строку, тильда заменяется

значением переменной HOME. Если переменная HOME не установлена, подставляется

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

Если же тильда-префикс не пустой, подставляется начальный каталог

соответствующего пользователя.

Если тильда-префикс имеет вид ~+, вместо него подставляется значение

переменной PWD. Если тильда-префикс имеет вид ~-, вместо него подставляется

значение переменной OLDPWD, если эта переменная установлена.

Если среди символов после тильды в тильда-префиксе имеется число

N, с необязательными префиксами + или -, тильда-префикс заменяется

соответствующим элементом из стека каталогов, который был бы выдан

встроенной командой dirs при вызове с тильда-префиксом в

качестве аргумента. Если символы после тильды содержат число без начального знака

+ или -, предполагается +.

Если соответствующего регистрационного имени не существует или

замену тиильды выполнить не удалось, исходное слово остается без изменений.

Присваивания значений переменным проверяются на наличие незамаскированных

тильда-префиксов сразу после : или =. В этих случаях также выполняется

замена тильды. Соответственно, можно использовать имена файлов с тильдами в

присваиваниях переменным PATH, MAILPATH и CDPATH, и командный

интерпретатор выполнит необходимые замены.

### Подстановка значений параметров
Символ $ обозначает подстановку значений параметров, подстановку

реультатов выполнения команд или подстановку значений арифметических выражений.

Имя параметра можно брать в фигурные скобки, что позволяет отделить его

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

При использовании фигурных скобок, завершающей считается первая скобка

}, не замаскированная обратной косой, не входящая в строку в кавычках, встроенное

арифметическое выражение или подставляемую команду, или в подстановку значения

другого параметра.

${параметр}

Подставляется значение указанного параметра. Фигурные скобки необходимы,

если параметр является позиционным и номер позиции состоит из нескольких

цифр или когда после параметра идет символ, не входящий в его имя.

Если первый символ параметра - восклицательный знак, начинается косвенная

подстановка. Командный интерпретатор bash использует значение переменной, имя

которой задается остальной частью параметра, в качестве имени переменной,

значение которой необходимо подставить, а не собственно значения. Это

называется косвенной заменой.

В каждом из описанных ниже случаев в полученном слове выполняется замена тильды,

подстановка значений параметров, подстановка результатов выполнения команд и

вычисление арифметических выражений. Если не выполняется подстановка подстрок,

bash проверяет, не является ли параметр не установленным или не имеет ли он

пустого значения; если не указать двоеточие, проверяется только, установлен ли

параметр.

${параметр:-слово}

Использовать стандартное значение. Если параметр не установлен или имеет пустое

значение, подставляется значение указанного слова. Иначе подставляется значение

параметра.

${параметр:=слово}

Присвоить стандартное значение. Если параметр не установлен или имеет пустое

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

специальным параметрам нельзя.

${параметр:?слово}

Выдавать ошибку если параметр не установлен или имеет пустое значение.

Если параметр имеет пустое значение или не установлен, указанное слово (или стандартное

сообщение, если слово не задано) выдается в стандартный поток ошибок,

и командный интерпретатор, если он не интерактивный, завершает работу.

В противном случае, подставляется значение параметра.

${параметр:+слово}

Использовать альтернативное значение. Если параметр не установлен или имеет

пустое значение, не подставляется ничего, в противном случае, подставляется

указанное слово.

${параметр:m}

${параметр:m:n}

Подстановка подстрок. Подставляет символы значения параметра, начиная с указанного

смещения m и вплоть до заданной длины n. Если длина не указана, подставляет символы

с указанного смещения и до конца. В качестве длины и смещения можно

задавать арифметические выражения (см.

раздел "ВЫЧИСЛЕНИЕ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ"

ниже). Длина должна быть неотрицательным числом. Если смещение - отрицательное число,

оно отсчитывается с конца значения параметра. Если параметр - @,

результат - n позиционных параметров, начиная с параметра m.

Если параметр - массив с индексом @ или *,

результат - n элементов массива, начиная с ${параметр[m]}.

Индексация подстрок начинается с нуля, за исключением позиционных параметров,

которые индексируются, начиная с 1.

${#параметр}

Подставляется длина значения параметра в символах. Если параметр - * или @,

подставляется количество позиционных параметров. Если параметр - массив с индексом

* или @, подставляется количество элементов массива.

${параметр#слово}

${параметр##слово}

Слово рассматривается как шаблон, аналогичный шаблону имен файлов. Если шаблон

сопоставляется с началом значения параметра, то результатом будет значение параметра,

из которого удалена самая короткая (в случае #) или самая длинная (в случае

\##) подстрока. Если параметр - @ или *, операция удаления шаблона применяется

поочередно к каждому позиционному параметру и подставляется полученный в результате

список. Если параметр - массив с индексом @ или *, операция удаления шаблона

применяется поочередно к каждому элементу массива и подставляется полученный

в результате список.

${параметр%слово}

${параметр%%слово}

Слово рассматривается как шаблон, аналогичный шаблону имен файлов. Если шаблон

сопоставляется с конечной частью значения параметра, то результатом будет значение параметра,

из которого удалена самая короткая (в случае %) или самая длинная (в случае

%%) подстрока. Если параметр - @ или *, операция удаления шаблона применяется

поочередно к каждому позиционному параметру и подставляется полученный в результате

список. Если параметр - массив с индексом @ или *, операция удаления шаблона

применяется поочередно к каждому элементу массива и подставляется полученный

в результате список.

${параметр/шаблон/строка}

${параметр//шаблон/строка}

Шаблон задается аналогично шаблонам имен файлов. Самая длинная подстрока значения

параметра, соответствующая шаблону, заменяется указанной строкой. В первом случае,

заменяется только первое вхождение. Во втором случае, заменяются все вхождения

шаблона. Если шаблон начинается с #, он должен сопоставляться начиная с начала

значения параметра. Если же шаблон начинается с %, он должен сопоставляться с

окончанием значения параметра. Если строка - пустая, соответсвующие шаблону подстроки

удаляются и / после шаблона можно не указывать. Если параметр - @ или *,

операция замены шаблона применяется поочередно к каждому позиционному параметру, и подставляется

полученный в результате список. Если параметр - массив с индексом @ или *,

операция замены шаблона применяется поочередно к каждому элементу массива и

подставляется полученный в результате список.

### Подстановка результатов выполнения команд
Подстановка результатов выполнения команд позволяет результат,

выдаваемый командой в стандартный выходной поток, подставить вместо имени

команды. Имеется две формы такой подстановки:

$(команда)

или

`команда`

Командный интерпретатор bash делает эту подстановку путем выполнения

команды и замены конструкции подстановки содержимым стандартного выходного

потока команды, из которого удалены завершающие переводы строк.

Встроенные переводы строк не удаляются, но они могут быть удалены при разбиении

на слова. Подстановку результатов выполнения команды $(cat file) можно

заменить эквивалентной, но более быстрой: $(< file).

При использовании старой формы подстановки в обратных апострофах

обратная косая интерпретируется как литерал, если только после нее не идут

символы $, ` или \. Первый же обратный апостроф, не замаскированный обратной

косой, завершает подставляемую команду. При использовании формы $(команда)

все символы между круглыми скобками образуют команду - ни один не имеет

специального значения.

Подстановка результатов выполнения команд может быть вложенной.

Для задания вложенной подстановки в форме с обратными апострофами замаскируйте

внутренние обратные апострофы обратными косыми.

Если подстановка задана в двойных кавычках, разбиение на слова и подстановка

имен файлов в результатах не выполняется.

    Подстановка значений арифметических выражений

При вычислении арифметических выражений вместо выражения подставляется результат

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

формат:.PP

$((выражение))

Выражение обрабатывается так, как если бы оно было взято в двойные кавычки, но

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

лексемах выражения выполняется подстановка значений параметров, подстановка строк,

подстановка результатов выполнения команд и удаление кавычек. Вычисления

арифметических выражений могут быть вложенными.

Вычисление выполняется по правилам, перечисленным ниже в разделе

"ВЫЧИСЛЕНИЕ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ".

Если выражение недопустимо, командный интерпретатор

bash выдает сообщение о невозможности вычисления и подстановка не выполняется.

### Подстановка процессов
Подстановка процессов доступна в системах, поддерживающих

именованные каналы (FIFO) или метод именования открытых файлов через

/dev/fd. Она имеет вид <(список) или >(список). Процесс список запускается и его

входной или выходной поток связывается с именованным каналом FIFO или

одним из файлов в /dev/fd. Имя этого файла передается в качестве аргумента

текущей команде как результат подстановки. Если использована форма

>(список), запись в файл будет давать входные данные процессу список. Если же

использована форма <(список), файл, переданный в качестве аргумента, необходимо

читать для получения результатов работы процесса список.

Если подстановка процессов поддерживается, она выполняется одновременно с

подстановкой значений параметров, подстановкой результатов выполнения команд

и вычислением арифметических выражений.

### Разбиение на слова
Командный интерпретатор обрабатывает результаты подстановки значений параметров,

результатов выполнения команд и арифметических вычислений, не взятых в

двойные кавычки, разбивая их на слова.

Командный интерпретатор рассматривает каждый символ значения переменной IFS

как разделитель и разбивает результаты подстановок на слова по этим символам.

Если переменная IFS не установлена или ее значение -

<пробел><табуляция><перевод строки>, т.е. стандартное, то любая

последовательность подряд идущих символов из IFS считается разделителем слов.

Если же переменная IFS имеет значение, отличающееся от стандартного,

то последовательность пробельных символов (пробелов и символов табуляции)

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

IFS (их обобщенно называют пробельным символом IFS). Любые символы в значении

IFS, не являющиеся пробельными, вместе с любыми идущими за ними пробельными

символами IFS, ограничивают слово. Последовательность пробельных символов

IFS также считается разделителем. Если переменная IFS имеет пустое значение,

разбиение на слова не происходит.

Явные пустые строки ("" или '') оставляются. Не взятые в кавычки неявные

пустые строки, получающиеся в результате подстановки параметров, не имеющих

значения, удаляются. Если параметр, не имеющий значения, подставляется в двойных

кавычках, получается пустая строка, и она остается в командной строке.

Учтите, что если не было подстановок, то и разбиение на слова не выполняется.

### Подстановка имен файлов
После разбиения на слова, если только не установлена опция -f,

командный интерпретатор bash просматривает каждое слово в поисках символов

*, ?, ( и [. Если найден любой из этих символов,

слово считается шаблоном и

заменяется упорядоченным по алфавиту списком имен файлов, соответствующих

шаблону. Если соответствующие имена файлов не найдены и опция командного

интерпретатора nullglob отключена,

слово остается без изменений. Если опция

nullglob установлена и соответствующие файлы не найдены, слово удаляется.

Если включена опция командного интерпретатора

nocaseglob, сопоставление

выполняется без учета регистра алфавитных символов. Если шаблон используется

для подстановки имен файлов, символ "." в начале имени или сразу после косой

черты должен сопоставляться явно, если только не установлена опция

интерпретатора dotglob. При сопоставлении имен файлов косые черты

всегда должны сопоставляться явно. В других случаях символ "." обрабатывается

как любые другие символы. См. описание опций командного интерпретатора

nocaseglob, nullglob

и dotglob

ниже в разделе "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА".

Переменная командного интерпретатора GLOBIGNORE может использоваться

для ограничения множества имен файлов, соответствующих шаблону. Если

переменная GLOBIGNORE установлена, каждое сопоставившееся имя файла,

соответствующее также одному из шаблонов, заданных в GLOBIGNORE, удаляется

из списка сопоставившихся. Имена файлов "." и ".." игнорируются всегда, даже

если установлена переменная GLOBIGNORE. Однако при установке переменной

GLOBIGNORE автоматически устанавливается опция интерпретатора

dotglob,

так что все остальные имена файлов, начинающиеся с ".", будут подставлены.

Для получения старого поведения - игнорирования имен файлов, начинающихся с ".", -

задайте ".*" как один из шаблонов в переменной GLOBIGNORE.

Опция dotglob отключается, если переменная GLOBIGNORE не установлена.

    Сопоставление с образцом

Любой символ в шаблоне, отличающийся от специальных, описанных ниже,

сопоставляется буквально. Символ NUL в шаблоне указывать нельзя.

Специальные символы шаблона для буквального сопоставления необходимо

маскировать.

Специальные символы шаблона имеют следующие значения:

*

Соответствует любой строке, в том числе, пустой.

?

Соответствует любому одиночному символу.

[...]

Соответствует любому из символов в квадратных скобках. Пара символов,

разделенная дефисом, задает диапазон; любой символ, лексически находящийся между

этими двумя символами, включительно, будет соответствовать этой конструкции.

Если сразу после [ идет символ ! или ^, то конструкции соответствует любой

символ, не указанный в квадратных скобках. Для сопоставления с дефисом (-)

его необходимо указать в квадратных скобках первым или последним. Для задания

закрывающей квадратной скобки (]), ее необходимо указать как первый символ набора.

В квадратных скобках можно задавать классы символов с помощью конструкции

[:класс:], где класс - один из следующих классов, определяемых стандартом

POSIX.2:

alnum alpha ascii blank cntrl digit graph lower print

punct space upper xdigit

Класс символов сопоставляется с любым символом, принадлежащим к этому классу.

В квадратных скобках можно задавать класс эквивалентности с помощью конструкции

[=c=], соответствующей всем символам с тем же порядком сортировки

(collation weight), определяемым текущей локалью, что и символ c.

В квадратных скобках конструкция [.символ.] соответствует символу с

указанным порядком сортировки.

Если с помощью встроенной команды shopt установлена опция

командного интерпретатора extglob, распознается ряд дополнительных

операторов сопоставления с образцом. В следующем описании список_шаблонов -

это список из одного или нескольких шаблонов через вертикальную черту (|).

Составные шаблоны можно формировать из одного или нескольких следующих

подшаблонов:

?(список_шаблонов)

Соответствует нулю или одному вхождению указанных шаблонов

*(список_шаблонов)

Соответствует нулю или более вхождений указанных шаблонов

+(список_шаблонов)

Соответствует одному или оболее вхождений указанных шаблонов

@(список_шаблонов)

Соответствует ровно одному вхождению указанных шаблонов

!(список_шаблонов)

Соответствует любой строке, кроме соответствующей одному из указанных шаблонов.

### Удаление кавычек
После выполнения всех перечисленных выше подстановок все незамаскированные

вхождения символов \, ' и ", не являющиеся результатом этих подстановок,

удаляются.

## ПЕРЕНАПРАВЛЕНИЕ
Перед выполнением команды ее входной и выходной потоки могут быть

перенаправлены с помощью специальных конструкций, обрабатываемых командным

интерпретатором. Перенаправления также можно использовать для открытия и закрытия

файлов в текущей среде работы командного интерпретатора. Следующие операторы

перенаправления могут предшествовать простой команде или указываться в любом

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

порядке их указания, слева направо.

В следующих описаниях если номер дескриптора файла не указан и первый символ

оператора перенаправления - <, выполняется перенаправление стандартного

входного потока (дескриптор файла 0). Если же первым символом оператора

перенаправления является символ >, выполняется перенаправление стандартного

выходного потока (дескриптор файла 1).

В слове, идущем за оператором перенаправления в следующих описаниях, если не

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

подстановка значений параметров, подстановка результатов выполнения команд,

вычисление арифметических выражений, удаление кавычек и подстановка имен

файлов. Если в результате получается более одного слова, командный

интерпретатор bash выдает сообщение об ошибке.

Учтите, что порядок указания перенаправлений имеет значение. Например, команда

ls > dirlist 2>&1

перенаправляет в файл dirlist стандартный выходной поток и стандартный поток

ошибок, тогда как команда

ls 2>&1 > dirlist

перенаправляет в файл dirlist только стандартный выходной поток, поскольку

стандартный поток ошибок был направлен туде же, куда и стандартный выходной поток

до его перенаправления в файл dirlist.

Ошибка при открытии или создании файла приводит к отмене перенаправления.

### Перенаправление входного потока
Перенаправление входного потока приводит к открытию на чтение файла,

имя которого получается в результате подстановок в слове, через дескриптор

файла n, или как стандартного входного потока (дескриптор файла 0), если

n не указано.

В общем случае перенаправление входного потока имеет вид:

[n]<слово

### Перенаправление выходного потока
Перенаправление входного потока приводит к открытию на запись файла,

имя которого получается в результате подстановок в слове, через дескриптор

файла n, или как стандартного выходного потока (дескриптор файла 1), если n

не указано. Если файл не существует, он создается; если существует - он

усекается до нулевого размера.

В общем случае перенаправление выходного потока имеет вид:

[n]>слово

Если используется оператор перенаправления > и с помощью встроенной команды

set установлена опция noclobber, перенаправление не будет выполнено, если

файл с соответствующим именем существует и является обычным файлом.

Если используется оператор перенаправления >|, либо оператор

перенаправления - > и опция noclobber с помощью встроенной команды

set не

установлена, перенаправление выполняется, даже если соответствующий файл существует.

### Добавление перенаправленного вывода
Такое перенаправление вывода приводит к открытию файла, имя которого получается

в результате подстановок в слове, в режиме добавления через дескриптор файла

n, или к добавлению в стандартный выходной поток (дескриптор файла 1) если

n не указано. Если файл не существует, он создается.

Перенаправление вывода на добавление имеет следующий общий вид:

[n]>>слово

### Перенаправление стандартного выходного потока и стандартного потока ошибок
Командный интерпретатор bash позволяет перенаправить как стандартный выходной

поток (дескриптор файла 1), так и стандартный поток ошибок (дескриптор файла 2)

в файл, имя которого получается в результате подстановок в слове.

Для этого предлагается два формата конструкции перенаправления:

&>слово

и

>&слово

Первый формат является предпочтительным. Эта конструкция семантически

эквивалентна следующей:

>слово 2>&1

### Конструкция документ здесь
При этом типе перенаправления командный интерпретатор будет читать входные

данные из текущего файла, пока не встретится строка, содержащая только указанное

слово (без хвостовых пробелов). Все прочитанные до этого строки затем

используются как стандартный входной поток для команды.

Конструкция "документ здесь" имеет следующий формат:

<<[-]слово

документ-здесь

ограничитель

В слове не выполняется подстановка значений параметров, результатов выполнения

команд, имен файлов или вычисление арифметических выражений. Если в слове есть

замаскированный символ, ограничитель является результатом удаления символов

маскировки из слова. Если в слове нет замаскированных символов, во всех строках

"документа здесь" выполняется подстановка значений параметров, результатов

выполнения команд и вычисление арифметических выражений. В этом случае

пара \<перевод строки> игнорируется, и необходимо использовать \ для маскировки

символов \, $ и `.

Если в качестве оператора перенаправления используется <<-, то все

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

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

"документ здесь" в сценариях командного интерпретатора.

### Дублирование дескрипторов файлов
Оператор перенаправления

[n]<&слово

используется для дублирования дескрипторов входных файлов. Если в результате

подстановок слово представляет собой одну или несколько цифр, дескриптор

файла n становится копией соответствующего дескриптора файла. Если

файл с дескриптором, задаваемым цифрами слова, не открыт на чтение, возникает

ошибка перенаправления. Если после подстановок в слове получается -,

файл с дескриптором n закрывается. Если n не указано, используется

стандартный входной поток (дескриптор файла 0).

Оператор

[n]>&слово

используется аналогично для дублирования дескрипторов выходных файлов. Если

n не указано, используется стандартный выходной поток (дескриптор файла 1).

Если цифры в слове не задают дескриптор файла, открытого на запись, возникает

ошибка перенаправления. В качестве специального случая, если n не указано и слово

после подстановок не представляет собой одну или несколько цифр, стандартный

выходной поток и стандартный поток ошибок перенаправляются так, как было

описано выше.

### Открытие дескрипторов файлов для чтения и записи
Оператор перенаправления

[n]<>слово

вызывает открытие файла, имя которого получается в результате подстановок

в слове, для чтения и записи через дескриптор файла n или через дескриптор

файла 0, если n не указано. Если файл не существует, он создается.

## ПСЕВДОНИМЫ
Псеводнимы позволяют подставлять вместо первого слова простой команды строку.

Командный интерпретатор поддерживает список псевдонимов, которые можно

устанавливать и удалять с помощью встроенных команд alias и

unalias (см. раздел

"ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже). Первое слово

каждой команды, если оно не взято в кавычки, ищется в списке псевдонимов.

Если соответствующий псевдоним найден, слово заменяется текстом псевдонима.

Имя псевдонима и подставляемый текст может включать любые допустимые входные данные

для командного интерпретатора, включая перечисленные ранее метасимволы.

Единственное исключение - имя псевдонима не может содержать знак =.

Первое слово текста псевдонима также ищется в списке псевдонимов, но если оно

совпадает с именем подставляемого псевдонима, повторной подстановки не

происходит. Это означает, что можно задать псевдоним ls для ls -F,

например, и bash не будет пытаться выполнять рекурсивные подстановки в тексте

псевдонима. Если последний символ текста псевдонима - пробел, следующее за

псевдонимом слово исходной команды также ищется в списке псевдонимов и,

если найдено, заменяется.

Псевдонимы создаются и просматриваются с помощью комадны alias,

а удаляются с помощью команды unalias.

Нет механизма передачи аргументов в подставляемый текст. Если необходимы

аргументы, используйте функцию командного интерпретатора.

Псевдонимы не подставляются, если командный интерпретатор не является

интерактивным, если только с помощью встроенной команды shopt

не установлена опция expand_aliases

(см. описание команды shopt ниже, в разделе

"ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА").

Правила определения и использования псевдонимов несколько запутаны.

Командный интерпретатор bash всегда читает по крайней мере одну

полную строку ввода, прежде чем выполнять любые указанные в ней команды.

Псевдонимы подставляются при чтении строки, а не при ее выполнении. Поэтому

определение псевдонима, заданное в одной строке с другой командой, не учитывается,

пока не будет прочитана следующая строка. Команды, идущие после определения

псевдонима в той же строке, этот новый псевдоним не учитывают. Это поведение

также необходимо учитывать при выполнении функций. Псевдонимы подставляются

при чтении определения функции, а не при ее выполнении, поскольку определение

функции само является составной командой. Как следствие, псевдонимы, определенные

в функции, не доступны до тех пор, пока функция не выполнится. Для простоты,

всегда задавайте определения псевдонимов в отдельной строке и не используйте

команду alias в составных командах.

Практически все варианты использования псевдонимов покрываются функциями

командного интерпретатора.

## ФУНКЦИИ
Функция командного интерпретатора, определенная как было представлено ранее

в разделе "СИНТАКСИС КОМАНД", сохраняет под заданным именем

последовательность команд для выполнения в дальнейшем.

Функции выполняются в контексте текущего командного интерпретатора; для их

интерпретации не создается новый процесс (сравните с выполнением сценария

командного интерпретатора). При вызове функции ее аргументы становятся

позиционными параметрами. Специальный параметр # обновляется, отражая

это изменение. Позиционный параметр 0 не изменяется. Все остальные особенности

среды выполнения командного интерпретатора у функции и вызывающей ее команды

идентичны, только обработчик сигнала DEBUG (см. описание встроенной команды

trap в разделе

"ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже) не наследуется.

Можно объявлять локальные переменные функции с помощью встроенной команды

local. Обычно переменные и их значения совместно используются функцией и

вызвавшей ее командой.

Если в функции выполняется встроенная команда return, эта функция

завершается, и выполнение продолжается со следующей команды после вызова

функции. Когда функция завершается, восстанавливаются значения позиционных

параметров и специального параметра #, которые были до выполнения функции.

Имена и определения функций можно получить с помощью опции -f встроенных

команд declare или typeset.

С опцией -F встроенные команды declare и

typeset будут выдавать только имена функций. Функции можно

экспортировать, с помощью опции -f встроенной команды export,

так что они будут автоматически определены в порожденных командных

интерпретаторах.

Функции могут быть рекурсивными. Глубина рекурсии не ограничена.

## ВЫЧИСЛЕНИЕ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ
Командный интерпретатор в определенных случаях обеспечивает вычисление

арифметических выражений (см. встроенную команду let и подраздел

"Подстановка арифметических выражений" ранее).

Вычисление выполняется в

длинных целых числах без проверки переполнения, хотя деление на 0

перехватывается и выдается соответствующее сообщение об ошибке.

Операторы в следующем списке сгруппированы по уровням с одинаковым

приоритетом. Уровни перечислены в порядке убывания приоритета.

- +

унарные минус и плюс

! ~

логическое и побитовое отрицание

**

возведение в степень

* / %

умножение, деление, получение остатка от деления

+ -

сложение, вычитание

<< >>

побитовый сдвиг влево и вправо

<= >= < >

сравнение

== !=

равенство и неравенство

&

побитовое И

^

побитовое исключающее ИЛИ

|

побитовое ИЛИ

&&

логическое И

||

логическое ИЛИ

выражение?выражение:выражение

условное вычисление

= *= /= %= += -=

присваивание

В качестве операндов можно использовать переменные командного интерпретатора;

перед вычислением выполняется подстановка значений параметров. Значение

параметра в арифметическом выражении приводится к длинному целому.

Чтобы переменную командного интерпретатора можно было использовать в

арифметических выражениях, ее атрибут integer устанавливать

не обязательно.

Константы с начальным 0 интерпретируются как восьмеричные числа.

Начальные 0x или 0X обозначают шестнадцатеричную константу.

В остальных случаях числа имеют вид [основание#]n, где основание -

десятичное число от 2 до 64, представляющее основание системы счисления,

а n - число в этой системе счисления. Если основание не указано,

используется основание 10. Цифры, большие 9, представляются

строчными буквами, прописными буквами, символами _ и @, именно в таком порядке.

Если основание меньше или равно 36, прописные и строчные буквы эквивалентны и

используются для представления чисел от 10 до 35.

Операторы вычисляются в порядке приоритетов. Сначала вычисляются подвыражения в

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

стандартные приоритеты операторов.

## УСЛОВНЫЕ ВЫРАЖЕНИЯ
Условные выражения используются составной командой [[ и встроенными командами

test и [ для проверки атрибутов файла и выполнения

строковых и арифметических

сравнений. Выражения формируются из следующих унарных и бинарных элементарных

условий. Если любой из аргументов файл в одном из условий имеет вид /dev/fd/n,

проверяется файл с дескриптором n.

-a файл

Истинно, если файл существует.

-b файл

Истинно, если файл существует и являтся специальным блочным устройством.

-c файл

Истинно, если файл существует и является специальным символьным устройством.

-d файл

Истинно, если файл существует и является каталогом.

-e файл

Истинно, если файл существует

-f файл

Истинно, если файл существует и является обычным файлом.

-g файл

Истинно, если файл существует и имеет установленный бит SGID.

-h файл

Истинно, если файл существует и является символической связью.

-k файл

Истинно, если файл существует и имеет установленный "клейкий" бит.

-p файл

Истинно, если файл существует и является именованным каналом (FIFO).

-r файл

Истинно, если файл существует и доступен для чтения.

-s файл

Истинно, если файл существует и имеет ненулевой размер.

-t fd

Истинно, если дескриптор файла fd открыт и связан с терминалом.

-u файл

Истинно, если файл существует и имеет установленный бит SUID.

-w файл

Истинно, если файл существует и доступен для записи.

-x файл

Истинно, если файл существует и является выполняемым.

-O файл

Истинно, если файл существует и принадлежит пользователю, задаваемому текущим

эффективным идентификатором пользователя.

-G файл

Истинно, если файл существует и принадлежит группе, задаваемой текущим

эффективным идентификатором группы.

-L файл

Истинно, если файл существует и является символической связью.

-S файл

Истинно, если файл существует и является сокетом.

-N файл

Истинно, если файл существует и был изменен с момента последнего чтения.

файл1 -nt файл2

Истинно, если файл1 новее (в соответствии с датой изменения), чем файл2.

файл1 -ot файл2

Истинно, если файл1 старее, чем файл2.

файл1 -ef файл2

Истинно, если файл1 и файл2 находятся на одном устройстве и имеют одинаковые

номера индексных дескрипторов.

-o опция

Истинно, если установлена указанная опция командного интерпретатора. Список

опций см. далее в описании опции -o встроенной

команды set.

-z строка

Истинно, если длина строки - ноль (т.е. строка - пустая).

-n строка

строка

Истинно, если длина строки - не ноль.

строка1 == строка2

Истинно, если строки совпадают. Вместо == можно использовать просто =.

строка1 != строка2

Истинно, если строки не совпадают.

строка1 < строка2

Истинно, если строка1 в текущей локали при лексикографическом

упорядочении предшествует строке2.

строка1 > строка2

Истинно, если строка1 в текущей локали при лексикографическом

упорядочении идет после строки2.

arg1 OP arg2

Оператор OP - один из следующих: -eq, -ne, -lt,

-le, -gt или -ge. Эти бинарные арифметические операторы возвращают

истину, если arg1 равен, не равен, меньше, меньше или равен,больше, больше или равен

arg2, соответственно. Аргументы arg1 и arg2 могут быть любыми целыми числами.

## ОБРАБОТКА ПРОСТОЙ КОМАНДЫ
При обработке простой команды командный интерпретатор делает, слева направо,

следующие подстановки, присваивания и перенаправления.

- Слова, помеченные синтаксическим анализатором как присваивания переменным (те, что идут перед именем команды) и перенаправления, сохраняются для

дальнейшей обработки.

- В остальных словах выполняются подстановки и замены. Если после этого остались какие-то слова, первое из них считается именем команды, а остальные -

ее аргументами.

- Перенаправления выполняются так, как описано ранее в разделе "ПЕРЕНАПРАВЛЕНИЕ".

- В тексте после = в каждом присваивании переменной перед присваиванием выполняется замена тильды, подстановка значений параметров, подстановка

результатов выполнения команд и вычисление арифметических выражений, а также

удаление кавычек.

Если в результате имени команды нет, присваивания переменным влияют на среду

текущего командного интерпретатора. В противном случае, переменные добавляются в

среду выполняемой команды и не влияют на среду текущего командного

интерпретатора. Если происходит попытка присвоить значение переменной с атрибутом

только для чтения, выдается сообщение об ошибке и команда завершается с

ненулевым статусом выхода.

Если в результате имени команды нет, перенаправления выполняются,

но не влияют на среду текущего командного интерпретатора. При ошибке

перенаправления команда завершается с ненулевым статусом выхода.

Если после подстановок имя команды осталось, выполнение продолжается так,

как описано ниже. В противном случае, выполнение команды завершается.

При этом если выполнялись подстановки результатов выполнения команд,

статус выхода будет равен статусу последней команды, результаты которой были

подставлены. Если подстановок результатов выполнения команд не было, команда

завершается со статусом выхода ноль.

## ВЫПОЛНЕНИЕ КОМАНДЫ
После разбиения команды на слова, если в результате получилась простая команда

с необязательным списком аргументов, выполняются следующие действия..PP

Если имя команды не содержит сиволов косой черты, командный интерпретатор

пытается ее найти. Если существует функция командного интерпретатора с

таким именем, она вызывается как было описано выше

в разделе "ФУНКЦИИ".

Если же функции с таким именем нет, командный интерпретатор ищет ее в списке

встроенных команд. Если такая встроенная команда есть, она выполняется.

Если имя не является именем функции или именем встроенной команды и не содержит

пробелы, командный интерпретатор bash просматривает каждый

каталог в значении переменной PATH в поисках выполняемого файла с

соответствующим именем. Для запоминания полных имен выполняемых файлов

bash использует хэш-таблицу (см. описание команды hash

в разделе "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" далее).

Полный поиск по каталогам в PATH

выполняется только если команда не найдена в этой хэш-таблице.

Если команда при таком поиске не найдена, командный интерпретатор выдает

соответствующее сообщение и завершает выполнение команды со статусом выхода 127.

Если команда найдена или имя команды содержит косые черты, командный

интерпретатор выполняет соответствующую команду в отдельной среде выполнения.

Аргумент 0 устанавливается равным имени команды, и ей передаются параметры,

соответствующие аргументам в командной строке, если они заданы.

Если выполнить команду не удалось, потому что файл не соответствует поддерживаемым

выполняемым форматам, и этот файл не является каталогом, предполагается,

что файл является сценарием командного интерпретатора, содержащим его команды.

Для его выполнения запускается порожденный командный интерпретатор. Этот

порожденный командный интерпретатор переинициализируется, как если бы для

обработки сценария был вызван новый командный интерпретатор, но только

местонахождения команд, запомненные родительским интерпретатором (см. описание

команды hash ниже в разделе

"ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА"),

передаются порожденному.

Если текст в файле начинается с #!, остаток первой строки задает интерпретатор

для программы. Командный интерпретатор запускает указанный интерпретатор

в операционных системах, которые не поддерживают соответствующий формат

выполняемого файла непосредственно. Этому интерпретатору в качестве аргументов

передается один необязательный аргумент, затем имя интерпретатора из первой

строки программы, затем имя самой программы и ее аргументы, если они заданы.

## СРЕДА ВЫПОЛНЕНИЯ КОМАНД
У командного интерпретатора есть среда выполнения, содержащая следующие

компоненты:

- открытые файлы, унаследованные командным интерпретатором при вызове, с учетом изменений, вызванных перенаправлениями, переданными встроенной

команде exec

- текущий рабочий каталог, установленный командами cd, pushd или popd,

или унаследованный командным интерпретатором при вызове

- маска режима создания файла, установленная с помощью команды umask или унаследованная от родительского процесса

- текущие обработчики сигналов, установленные с помощью trap

- параметры командного интерпретатора, установленные путем присваивания переменным или унаследованные из среды родительского процесса

- функции командного интерпретатора, заданные в ходе выполнения или унаследованные из среды родительского процесса

- опции, установленные при вызове (как стандартные, так и заданные явно в командной строке) или установленные с помощью комнады set

- опции, установленные с помощью команды shopt

- псевдонимы, заданные с помощью команды alias

- идентификаторы различных процессов, в том числе, для фоновых заданий, значение параметра $$ и значение параметра $PPID

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

командного интерпретатора, она вызывается в отдельной среде выполнения,

состоящей из указанных ниже компонентов. Если не указано иначе, все значения

наследуются от командного интерпретатора.

- открытые файлы командного интерпретатора плюс любые изменения и дополнения, заданные для команды перенаправлениями

- текущий рабочий каталог

- маска режима создания файлов

- переменные командного интерпретатора, помеченные как экспортированные, а также переменные, экспортированные для команды и переданные в среде

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

Команда, вызванная в этой отдельной среде, не может повлиять на среду

выполнения родительского командного интерпретатора.

Команды, результаты которых необходимо подставить, и асинхронные команды

вызываются в средах порожденных командных интерпретаторов, которые совпадают

со средой родительского, но обработчки сигналов устанавливаются такие, как были

унаследованы родительским командным интерпретатором при вызове.

Встроенные команды, вызываемые как часть конвейера, также выполняются в среде

порожденного командного интерпретатора. Изменения в среде порожденного

командного интерпретатора не затрагивают среду выполнения родительского.

## СРЕДА
При вызове программы ей передается массив строк, который называют средой.

Это список пар имя-значение вида name=value.

Командный интерпретатор позволяет манипулировать средой несколькими способами.

При вызове командный интерпретатор просматривает свою среду и создает

одноименный параметр для каждого имени, автоматически экспортируя его для

порожденных процессов. Выполняемые команды наследуют среду. Команды

export и declare -x

позволяют добавлять и удалять параметры и функции из

среды. Если значение параметра, входящего в среду, изменено, новое значение

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

состоит из начальной среды командного интерпретатора, значения которой могли

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

команды unset, и новых параметров, добавленных с

помощью команд export и declare -x.

Среда для любой простой команды или функции может быть временно дополнена путем

задания перед именем присваиваний параметрам, как описано ранее в разделе

"ПАРАМЕТРЫ". Эти операторы присваивания влияют

только на среду вызываемой команды.

Если установлена опция -k, (см. описание встроенной команды

set ниже), то все параметры с присвоенными при вызове значениями,

а не только предшествующие имени команды, помещаются в ее среду.

Когда командный интерпретатор bash вызывает внешнюю команду, переменная _

устанавливается равной полному имени файла команды и передается этой команде

в среде.

## СТАТУС ВЫХОДА
С точки зрения командного интерпретатора, команда, завершившаяся со статусом

выхода 0, сработала успешно. Статус выхода 0 означает успешное завершение.

Ненулевой статус выхода означает неудачу. Если работа команды прервана сигналом,

командный интерпретатор bash использует в качестве статуса выхода

значение 128+сигнал.

Если команда не найдена, порожденный для ее выполнения процесс возвращает

статус выхода 127. Если команда найдена, но не является выполняемой,

возвращается статус выхода 126.

Если команда не сработала, поскольку ошибка произошла при подстановках или

перенаправлениях, возвращается положительный статус выхода.

Встроенные команды интерпретатора возвращают статус 0 (истина) при успешном

выполнении, и ненулевой статус (ложь), если при выполнении произошла ошибка.

При некорректном использовании все встроенные команды возвращают статус 2.

Сам командный интерпретатор bash возвращает статус выхода последней выполненной

команды, если только не обнаруживает синтаксическую ошибку. В этом случае

он завершает работу с ненулевым статусом. См. также описание встроенной

команды exit ниже.

## СИГНАЛЫ
Когда командный интерпретатор bash работает в интерактивном режиме,

при отсутствии обработчиков сигналов, он игнорирует сигнал SIGTERM (так что

команда kill 0 не прекращает работу интерактивного

командного интерпретатора),

а сигнал SIGINT перехватывается и обрабатывается (так, что встроенная команда

wait им не прерывается). Во всех случаях,

bash игнорирует сигнал SIGQUIT.

Если действует управление заданиями, bash игнорирует сигналы SIGTTIN,

SIGTTOU и SIGTSTP.

У синхронных заданий, запущенных командным интерпретатором bash,

устанавливаются обработчики сигналов, унаследованные командным интерпретатором

от родительского процесса. Если управление заданиями не действует, асинхронные

команды также игнорируют сигналы SIGINT и SIGQUIT. Команды, выполняемые для

подстановки результатов выполнения, игнорируют сигналы управления заданиями

SIGTTIN, SIGTTOU и SIGTSTP, посланные с клавиатуры.

По умолчанию командный интерпретатор завершает работу при получении сигнала

SIGHUP. Перед завершением он посылает сигналы SIGHUP всем заданиям, как

выполняющимся, так и остановленным. Остановленным заданиям предварительно

посылается сигнал SIGCONT, гарантирующий получение ими сигнала SIGHUP. Для

предотвращения послыки интерпретатором сигнала конкретному заданию, его

необходимо удалить из таблицы заданий с помощью встроенной

команды disown

(см. раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" далее)

или пометить как не получающие сигнал SIGHUP

с помощью disown -h.

Если с помощью команды shopt установлена опция

командного интерпретатора huponexit,

bash посылает сигнал SIGHUP всем заданиям при завершении

работы интерактивного начального командного интерпретатора.

При получении командным интерпретатором bash сигнала, для которого установлен

обработчик, в то время, когда ожидается завершение команды, обработчик

не выполняется, пока команда не завершится. Когда bash ожидает завершения

асинхронной команды с помощью встроенной команды wait,

получение сигнала, для которого установлен обработчик, приводит к немедленному

завершению встроенной команды wait со статусом выхода

более 128 сразу же после выполнения кода обработчика.

## УПРАВЛЕНИЕ ЗАДАНИЯМИ
Управление заданиями - это возможность избирательно останавливать

(приостанавливать) выполнение процессов и продолжать (возобновлять)

их выполнение в дальнейшем. Пользователи обычно делают это через

интерактивный интерфейс, совместно реализуемый драйвером терминала и

командным интерпретатором bash.

Командный интерпретатор связывает задание с каждым конвейером. Он поддерживает

таблицу выполняющихся заданий, которую можно просматривать с помощью

команды jobs.

При запуске задания асинхронно (в фоновом режиме) bash

выдает строку следующего вида:

[1] 25647

показывающую, что это задание с номером 1, а идентификатор последнего

процесса в конвейере, связанном с данным заданием - 25647. Все процессы в одном

конвейере являются частями одного задания. Командный интерпретатор bash

использует понятие задания как основу для управления заданиями.

Для упрощения реализации пользовательского интерфейса для управления заданиями

система поддерживает понятие идентификатора группы процессов текущего терминала.

Члены этой группы процессов (процессы, идентификатор группы процессов которых

равен идентификатору группы процессов терминала) получают сигналы с клавиатуры,

например, сигнал SIGINT. Эти процессы называют приритетными (процессами переднего

плана). Фоновые процессы - это те, идентификатор группы процессов которых не

совпадает с терминальным; таким процессам сигналы с клавиатуры не посылаются.

Только приоритетные процессы могут читать данные с терминала и выдавать

данные в него. Фоновые процессы, пытающиеся читать с терминала (или выдавать

в него данные) получают от драйвера терминала сигнал SIGTTIN (SIGTTOU),

который, если не перехвачен, приостанавливает работу процесса.

Если операционная система, в которой работает bash, поддерживает управление

заданиями, bash позволяет его использовать. При нажатии клавиши приостановки

(обычно ^Z, Control-Z) по ходу работы процесса, этот процесс останавливается и

управление возвращается командному интерпретатору bash. При нажатии клавиши

отложенной приостановки (обычно ^Y, Control-Y) процесс останавливается при

попытке чтения данных с терминала, и управление возвращается командному

интерпретатору bash. Затем пользователь может управлять состоянием этого задания,

используя команду bg для его продолжения в фоновом режиме,

команду fg - для

продолжения в приоритетном режиме или команду kill для его прекращения.

Нажатие ^Z срабатывает немедленно и имеет дополнительный побочный

эффект в виде сброса данных, ожидающих вывода и ввода.

Командный интерпретатор поддерживает несколько способов сослаться на задание.

Символ % означает начало имени задания. На задание с номером n можно

сослаться как %n. На задание можно сослаться также с помощью префикса имени

команды, использованной для его начала, или подстроки, входящей в

соответствующую командную строку. Например, %ce ссылается на остановленное

задание ce. Если префикс соответствует нескольким заданиям, bash выдает

сообщение об ошибке. Обращение вида %?ce, с другой стороны, ссылается на любое

задание, в командной строке которого содержится подстрока ce. Если эта

подстрока содержится в нескольких заданиях, bash выдает сообщение об ошибке.

Строки %% и %+ обозначают текущее задание командного интерпретатора -

последнее задание, остановленное при работе в приоритетном режиме или запущенное в

фоновом режиме. На предыдущее задание можно сослаться с помощью строки %-.

В результатах работы команд, связанных с управлением заданиями, (в частности,

в результатах выполнения команды jobs), текущее задание всегда

помечается знаком +, а предыдущее - знаком -.

Для перевода задания в приоритетный режим достаточно ввести только его имя:

%1 - это синоним для команды "fg %1", переводящей задание 1 из фонового

в приоритетный режим. Аналогично, команда "%1 &" продолжает работу задания

1 в фоновом режиме и эквивалентна команде "bg %1".

Об изменении состояния задания командный интерпретатор узнает сразу.

Обычно bash информирует об изменениях в состоянии заданий при выдаче очередного

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

Если с помощью встроенной команды set установлена

опция -b, bash информирует о таких изменениях немедленно.

Если при наличии остановленных заданий происходит попытка выхода из bash,

командный интерпретатор выдает соответствующее предупреждение. Затем

с помощью команды jobs можно проверить состояние этих заданий. Если

сразу же выполняется повторная попытка завершить работу, командный интерпретатор не выдает

предупреждения и остановленные задания прекращаются.

## ПРИГЛАШЕНИЯ
При интерактивной работе командный интерпретатор bash выдает первичное

приглашение, PS1, когда он готов к вводу команды, и вторичное приглашение,

PS2, когда для завершения команды необходимы дополнительные данные.

Командный интерпретатор bash позволяет настраивать эти строки приглашения

с помощью ряда маскируемых обратной косой специальных символов со следующими

значениями:

\a

символ сигнала ASCII (звонок - 07)

\d

дата в формате "День_недели Месяц Число" (т.е., "Tue May 26")

\e

управляющий символ ASCII (033)

\h

имя хоста вплоть до первого символа '.'

\H

имя хоста

\n

перевод строки

\r

возврат каретки

\s

имя командного интерпретатора - базовое имя из параметра $0 (часть полного

имени после последней косой черты)

\t

текущее время в 24-часовом формате ЧЧ:ММ:СС

\T

текущее время в 12-часовом формате ЧЧ:ММ:СС

\@

текущее время в 12-часовом формате am/pm (утра/вечера)

\u

имя текущего пользователя

\v

версия командного интерпретатора bash (например, 2.00)

\V

релиз командного интерпретатора bash, версия + уровень исправлений

(например, 2.00.0)

\w

текущий рабочий каталог

\W

базовое имя текущего рабочего каталога

\!

порядковый номер данной команды в списке истории

\#

порядковый номер данной команды

\$

если эффективный идентификатор пользователя - 0, то #, иначе - $

\nnn

символ, соответствующий восьмеричному числу nnn

\\

обратная косая

\[

начало последовательности непечатных символов, которая может использоваться

для включения в приглашение управляющих символов терминала

\]

завeршение последовательности непечатных символов

Порядковый номер команды и порядковый номер команды в списке истории обычно

различаются: порядковый номер в списке истории задает ее позицию в списке,

который может содержать команды, прочитанные из файла истории

(см. раздел "ИСТОРИЯ ВЫПОЛНЕНИЯ КОМАНД" далее), тогда как порядковый

номер команды задает ее позицию в списке команд, выполненных в текущем сеансе

командного интерпретатора. После декодирования строки приглашения в ней

выполняется подстановка значений параметров, подстановка результатов выполнения

команд, результатов вычисления арифметических выражений, подстановка строк и

удаление кавычек, в зависимости от значения опции командного интерпретатора

promptvars

(см. описание команды shopt в разделе

"ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" далее).

## БИБЛИОТЕКА READLINE
Это библиотека, обрабатывающая входные данные при работе командного

интерпретатора в интерактивном режиме, если при его вызове не была указана

опция --noediting. По умолчанию, команды редактирования

строки подобны используемым в редакторе emacs. Также предоставляется интерфейс для

редактирования командной строки в стиле редактора vi. Для отключения

возможности редактирования после запуска командного интерпретатора используются

опции +o emacs или +o vi встроенной команды set

(см. раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже).

### Соглашения по записи команд readline
В этом разделе для записи нажимаемых клавиш используются соглашения в стиле

редактора emacs. Управляющие клавиши обозначаются C-клавиша, так что C-n

сокращенно обозначает Control-N. Аналогично, метаклавиши обозначаются

M-клавиша, так что M-x обозначает Meta-X. (На клавиатурах, где нет клавиши

meta, M-x обозначает ESC x, т.е. нажать клавишу Escape и затем

нажать клавишу x. Тем самым, клавиша ESC реализует префикс meta.

Комбинация M-C-x обозначает ESC-Control-x, или нажать клавишу Escape,

затем, удерживая клавишу Control, нажать клавишу x.)

Команды библиотеки readline могут иметь числовые аргументы, обычно обозначающие

количество повторений. Иногда, однако, они являются признаком значимости аргумента.

Передача отрицательного аргумента команде, работающей с дальнейшим текстом

(например, kill-line) приводит к ее применению к предшествующему тексту.

Команды, работа которых отличается от описанной здесь, специально отмечены ниже.

Если команда удаляет текст, этот текст сохраняется для дальнейшего извлечения

(вставки). Удаленый текст помещается в кольцевой буфер. Последовательные удаления

пополняют буфер, формируя единицу вставки. Команды, не удаляющие текст,

разделяют фрагменты в кольцевом буфере удаления.

### Инициализация библиотеки readline
Библиотека readline настраивается с помощью команд в файле инициализации

(файл inputrc). В качестве имени этого файла берется значение переменной

INPUTRC. Если эта переменная не установлена, используется стандартный файл,

~/.inputrc. При запуске программы, использующей библиотеку readline,

файл инициализации читается и устанавливаются соответствующие переменные

и горячие клавиши. В файле инициализации readline допускаются лишь несколько

простых конструкций. Пустые строки игнорируются. Строки, начинающиеся символом

\#, являются комментариями. Строки, начинающиеся символом $, обозначают условные

конструкции. Остальные строки обозначают установки горячих клавиш и присваивания

значений переменным.

Стандартные горячие клавиши можно изменить в файле inputrc. Другие программы,

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

клавиши.

Например, поместив в файл инициализации

M-Control-u: universal-argument

или

C-Meta-u: universal-argument

мы привязываем к комбинации клавиш M-C-u команду universal-argument библиотеки

readline.

Распознаются следующие имена символов: RUBOUT, DEL, ESC,

LFD, NEWLINE, RET, RETURN, SPC, SPACE и TAB. Кроме

имен команд, библиотека readline позволяет привязывать к клавишам строки,

которые будут вставляться при их нажатии (т.е. задвать макроподстановки).

### Горячие клавиши readline
Привязки клавиш в файле inputrc задаются с помощью простого синтаксиса.

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

клавиши, с которыми его надо связать. Горячие клавиши можно задавать двумя

способами: как символическое имя клавиши, возможно, с префиксом Meta- или

Control-, или как комбинацию клавиш. При использовании формы

имя_клавиши:имя_функции или макроподстановка, имя_клавиши просто задается на

английском. Например:

Control-u: universal-argument

Meta-Rubout: backward-kill-word

Control-o: "> output"

В этом примере комбинация клавиш C-u связывается с функцией universal-argument,

M-DEL - с функцией backward-kill-word, а C-o - с макроподстановкой, указанной

в правой части (т.е. приведет к вставке текста > output в строку).

Во второй форме, "комбинация_клавиш":имя_функции или макроподстановка, комбинация

клавиш отличается от использованного выше имени клавиши тем, что может

задаваться в двойных кавычках. При этом можно использовать некоторые

управляющие символы в стиле GNU Emacs, как в следующем примере.

"\C-u": universal-argument

"\C-x\C-r": re-read-init-file

"\e[11~": "Function Key 1"

В этом примере, комбинация клавиш C-u опять связывается с функцией

universal-argument. Комбинация C-x C-r связывается с функцией re-read-init-file,

а комбинация ESC [ 1 1 ~ будет приводить к вставке текста Function Key 1.

Полный набор управляющих последовательностей в стиле GNU Emacs представлен ниже.

\C-

префикс клавиши Control

\M-

префикс клавиши Meta

\e

управляющий символ

\\

обратная косая

\"

символ "

\'

символ '

Помимо управляющих последовательностей в стиле GNU Emacs, имеется еще один

набор управляющих последовательностей, начинающихся с обратной косой:

\a

предупреждение (звонок)

\b

забой (backspace)

\d

удаление символа (delete)

\f

перевод страницы (form feed)

\n

новая строка

\r

возврат каретки

\t

горизонтальная табуляция

\v

вертикальная табуляция

\nnn

символ, ASCII-код которого имеет восьмеричное значение nnn (от одной до трех цифр)

\xnnn

символ, ASCII-код которого имеет щестнадцатеричное значение nnn

(от одной до трех цифр)

При вводе текста макроподстановки необходимо для ее обозначения указывать

одиночные или двойные кавычки. Текст без кавычек считается именем функции. В теле

макроподстановки интерпретируются перечисленные выше управляющие

последовательности, начинающиеся с обратной косой. Обратная косая маскирует

любой другой символ в тексте макроподстановки, в том числе, символы " и '.

Командный интерпретатор bash позволяет просмотреть или изменить текущие горячие

клавиши библиотеки readline с помощью встроенной команды bind.

Режим редактирования можно переключать в ходе интерактивной работы с помощью опции

-o встроенной команды set

(см. раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже).

### Переменные readline
Библиотека readline поддерживает переменные, которые можно использовать для

дополнительной настройки ее работы. Значение переменной можно установить в файле

inputrc или с помощью оператора вида

set имя_переменной значение

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

On или Off. Ниже представлены эти переменные и их стандартные значения:

bell-style (audible)

Управляет тем, что происходит, когда библиотека readline должна выдать звонок

(звуковой сигнал) терминала. Если задано значение none, readline никогда не

выдает звуковой сигнал. Если задано значение visible, readline использует

визуальный сигнал, если он поддерживается терминалом. Если задано значение

audible, readline пытается выдать звуковой сигнал терминала.

comment-begin ("#")

Строка, вставляемая при выполнении команды insert-comment библиотеки readline.

Эта команда привязана к клавишам M-# в режиме emacs и к клавише # в режиме vi.

completion-ignore-case (Off)

Если установлено значение On, библиотека readline выполняет подстановку имен файлов

и дополнение командной строки с учетом регистра.

completion-query-items (100)

Определяет, когда у пользователя запрашивают подтверждение выдачи всех завершений

команды, генерируемых командой possible-completions. Можно задавать любое

неотрицательное целочисленное значение. Если количество возможных завершений

больше или равно значению этой переменной, у пользователя запрашивают, желает

ли он все их увидеть; иначе они просто выдаются на терминал.

convert-meta (On)

Если установлено значение On, readline будет преобразовывать символы с установленным

восьмым битом в последовательность символов ASCII путем сброса восьмого бита и

добавления управляющего символа (фактически, используя управляющий символ как

мета-префикс).

disable-completion (Off)

Если установлено значение On, readline не будет выполнять завершение слов. Символы

завершения будут вставляться в строку буквально.

editing-mode (emacs)

Управляет тем, с каким набором горячих клавиш начинает работать библиотека readline -

анаголичным emacs или vi. Переменная editing-mode может иметь значения emacs или vi.

enable-keypad (Off)

Если установлено значение On, readline будет пытаться включить поддержку цифрового

блока клавиатуры справа при вызове. Некоторым системам это необходимо для поддержки

клавиш со стрелками.

expand-tilde (Off)

Если установлено значение On, при попытке завершеная слов выполняется замена тильды.

horizontal-scroll-mode (Off)

Если установлено значение On, readline будет использовать одну строку для показа,

прокручивая ее при необходимости в одной строке, когда ее длина превышает ширину

экрана, а не перенося визуально на новую строку.

input-meta (Off)

Если установлено значение On, readline будет поддерживать ввод восьмибитовых

символов (т.е. не будет сбрасывать старший бит символов при чтении), независимо

от того, поддерживает ли восьмибитовые символы терминал. Имя meta-flag - синоним

для данной переменной.

isearch-terminators ("C-[C-J")

Строка символов, которые должны прекращать инкрементный поиск без последующего

выполнения символа как команды. Если значение этой переменной не задано, инкрементный

поиск будут прекращать клавиши ESC и C-J.

keymap (emacs)

Устанавливает текущую раскладку горячих клавиш для readline. Допускаются имена раскладок

emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command и vi-insert.

vi эквивалентно vi-command; emacs эквивалентно emacs-standard. Стандартное значение -

emacs; значение переменной editing-mode также влияет на горячие клавиши.

mark-directories (On)

Если установлено значение On, к завершенным именам каталогов добавляется косая черта.

mark-modified-lines (Off)

Если установлено значение On, перед строками списка истории команд, которые были изменены,

выдается звездочка (*).

output-meta (Off)

Если установлено значение On, readline будет выдавать символы с установленным

восьмым битом непосредственно, а не как управляющую последовательность,

начинающуюся метасимволом.

print-completions-horizontally (Off)

Если установлено значение On, readline будет выдавать возможные завершения

отсортированные в алфавитном порядке по горизонтали, в строках, а не по вертикали,

в столбцах.

show-all-if-ambiguous (Off)

Изменяет стандартное поведение функций завершения. Если установлено значение On,

для слов, имеющих более одного возможного завершения, список возможных

выдается сразу, а не после звукового сигнала.

visible-stats (Off)

Если установлено значение On, к именам файлов при выдаче возможных завершений

добавляется символ, задающий их тип в соответствии с функцией stat(2).

### Управляющие конструкции readline
Библиотека readline реализует средства, аналогичные по духу возможностям

условной компиляции препроцессора языка C и позволяющие назначать горячие клавиши или

присваивать значения переменным в зависимости от условий. Поддерживается

четыре директивы анализатора.

$if

Конструкция $if позволяет назначать те или иные клавиши в зависимости от используемого

режима редактирования, тип терминала или приложения, использующего библиотеку

readline. Текст условия продолжается до конца строки - никакие завершающие символы

не нужны.

mode

Форма mode= директивы $if используется для проверки того, работает ли библиотека

readline в режиме emacs или vi. Ее можно использовать совместно с командой

set keymap, например, для установки горячих клавиш стандарта emacs и

раскладки emacs-ctlx только если readline запускается в режиме emacs.

term

Форма term= может использоваться для включения специфических горячих клавиш

для данного терминала, в частности, для привязки последовательностей символов к

функциональным клавишам терминала. Слово справа от символа = сравнивается с

полным именем терминала и частью имени терминала до первого вхождения -.

Это позволяет задавать, например, sun для сопоставления как с sun, так и

с sun-cmd.

приложение

Конструкция приложение используется для включения специфических настроек

приложения. Каждая программа, использующая библиотеку readline, устанавливает

имя приложения, а в инициализационном файле можно проверять установку определенного

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

конкретной программы. Например, следующая команда задает последовательность клавиш,

берущую в кавычки текущее или предыдущее слово в bash:

$if Bash

\# Взять в кавычки текущее или предыдущее слово

"\C-xq": "\eb\"\ef\""

$endif

$endif

Эта команда, как видно по предыдущему примеру, завершает команду $if.

$else

Команды в этой ветке директивы $if выполняются, если не выполнено условие проверки.

$include

Эта директива принимает в качестве аргумента имя файла и читает команды и привязки

клавиш из этого файла. Например, следующая директива требует прочитать файл

/etc/inputrc:

$include /etc/inputrc

### Поиск
Библиотека readline предлагает команды для поиска в списке истории команд

(см. раздел "ИСТОРИЯ ВЫПОЛНЕНИЯ КОМАНД" ниже) строк, содержащих определенную подстроку. Имеется два режима поиска: инкрементный и не инкрементный.

Инкрементные поиски начинаются прежде, чем пользователь закончит ввод искомой строки.

Привводе каждого символа искомой строки, readline выдает следующую

запись из списка истории, соответствующую уже набранной подстроке. При

инкрементном поиске достаточно ввести ровно столько символов, сколько надо

для нахождения интересующей команды. Символы значения переменной

isearch-terminators используются для завершения инкрементного поиска. Если

значение этой переменной не задано, инкрементный поиск прерывается клавишами

Escape и Control-J. Нажатие Control-G прерывает инкрементный поиск и восстанавливает

исходную строку. При завершении поиска, запись из списка истории, содержащая строку

поиска, становится текущей строкой. Для поиска других соответствующих записей в

списке истории, нажмите Control-S или Control-R, в зависимости от направления

поиска. В результате, будет выполнен поиск в обратном или прямом направлении

следующей записи, соответствующей уже набранному фрагменту строки. Ввод любой другой

последовательности символов, привязанной к команде библиотеки readline,

приводит к завершению поиска и выполнению команды. Например, нажатие клавиши Enter

завершит поиск и выполнит выбранную команду из списка истории.

При неинкрементом поиске перед началом поиска читается вся искомая строка. Искомая строка

может быть набрана пользователем или быть частью содержимого текущей строки.

    Имена команд readline

Ниже представлен список имен команд и стандартные комбинации клавиш, к

которым они привязаны. Имена команд, для которых не указана комбинация

клавиш, по умолчанию ни к какой комбинации не привязаны.

### Команды для перемещения
beginning-of-line (C-a)

Перемещает курсор в начало текущей строки.

end-of-line (C-e)

Перемещает курсор в конец строки.

forward-char (C-f)

Перемещает курсор на один символ вперед.

backward-char (C-b)

Перемещает курсор на один символ назад.

forward-word (M-f)

Перемещает курсор на одно слово вперед. Слова состоят из алфавитно-цифровых

символов (букв и цифр).

backward-word (M-b)

Переходит к началу текущего или предыдущего слова. Слова состоят из

алфавитноцифровых символов (букв и цифр).

clear-screen (C-l)

Очищает экран, оставляя текущую строку вверху экрана. При указании аргумента

обновляет текущую строку, не очищая экрана.

redraw-current-line

Обновляет текущую строку.

### Команды для работы со списком истории
accept-line (Newline, Return)

Принимает строку, независимо от позиции курсора. Если эта строка - не пустая,

добавляет ее в список истории в соответствии с состоянием переменной

HISTCONTROL. Если строка представляет собой измененную строку из списка

истории, то строка истории восстанавливается в исходное состояние.

previous-history (C-p)

Извлекает предыдущую команду из списка истории, возвращаясь к началу списка.

next-history (C-n)

Извлекает следующую команду из списка истории, направляясь к концу списка.

beginning-of-history (M-<)

Переходит к первой строке в списке истории.

end-of-history (M->)

Переходит к концу истории введенных команд, т.е. к текущей вводимой строке.

reverse-search-history (C-r)

Ищет команду среди предыдущих, начиная с текущей строки и продвигаясь, при

необходимости, к началу списка истории. Этот поиск - инкрементный.

forward-search-history (C-s)

Поиск далее, начиная с текущей строки и продвигаясь, при необходимости,

к концу списка истории. Этот поиск - инкрементный.

non-incremental-reverse-search-history (M-p)

Неинкрементный поиск введенной пользователем строки в обратном направлении,

начиная с текущей строки.

non-incremental-forward-search-history (M-n)

Неинкрементный поиск введенной пользователем строки далее,

начиная с текущей строки.

history-search-forward

Поиск далее в списке истории строки символов от начала текущей строки до

позиции курсора (текущей позиции). Этот поиск - не инкрементный.

history-search-backward

Поиск в обратном направлении в списке истории строки символов от начала

текущей строки до позиции курсора (текущей позиции). Этот поиск - не инкрементный.

yank-nth-arg (M-C-y)

Вставляет первый аргумент предыдущей команды (обычно это второе слово

предыдущей строки) в текущую позицию курсора. Если указан аргумент n,

вставляет n-ное слово предыдущей команды (слова в предыдущей команде нумеруются

с 0). Если аргумент - отрицательный, вставляется n-ное слово от конца

предыдущей команды.

yank-last-arg (M-., M-_)

Вставляет последний аргумент предыдущей команды (последнее слово в предыдущей

записи списка истории). Если указан аргумент, работает так же, как и

команда yank-nth-arg. При последовательном вызове команды

yank-last-arg выполняется проход в обратном направлении по списку истории,

со вставкой последнего аргумента очередной строки.

shell-expand-line (M-C-e)

Выполняет подстановки в строке по аналогии с командным интерпретатором.

Выполняются подстановки псевдонимов и команд из списка истории,

а также подстановка слов. Описание подстановки команд из списка истории

см. далее в разделе "ПОДСТАНОВКА КОМАНД ИЗ СПИСКА ИСТОРИИ".

history-expand-line (M-^)

Выполняет подстановку команд из списка истории в текущей строке.

Описание подстановки команд из списка истории

см. далее в разделе "ПОДСТАНОВКА КОМАНД ИЗ СПИСКА ИСТОРИИ".

magic-space

Выполняет подстановку команд из списка истории в текущей строке

и добавляет пробел. Описание подстановки команд из списка истории

см. далее в разделе "ПОДСТАНОВКА КОМАНД ИЗ СПИСКА ИСТОРИИ".

alias-expand-line

Выполняет подстановку псевдонимов в текущей строке. Описание подстановки

псевдонимов см. ранее в разделе ""ПСЕВДОНИМЫ".

history-and-alias-expand-line

Выполняет подстановки псевдонимов и команд из списка истории в текущей строке.

insert-last-argument (M-., M-_)

Синоним для команды yank-last-arg.

operate-and-get-next (C-o)

Принимает текущую строку для выполнения и извлекает следующую строку

после текущей из списка истории для редактирования. Аргументы игнорируются.

    Команды для изменения текста

delete-char (C-d)

Удаляет символ в позиции курсора. Если текущая позиция - начало строки,

в строке нет символов и последняя нажатая клавиша не привязана к команде

delete-char, возвращает EOF.

backward-delete-char (Backspace)

Удаляет символ перед курсором. При указании числового аргумента

сохраняет удаленный текст в кольцевом буфере (kill ring).

forward-backward-delete-char

Удаляет символ в позиции курсора, если куросор не в конце строки, - в

этом случае удаляется символ перед курсором. По умолчанию эта команда ни к

какой комбинации клавиш не привязана.

quoted-insert (C-q, C-v)

Добавляет следующий набранный символ буквально. Так можно вставлять, например,

символы типа C-q.

tab-insert (C-v TAB)

Вставляет символ табуляции.

self-insert (a, b, A, 1, !, ...)

Вставляет набранный символ.

transpose-chars (C-t)

Переносит символ перед текущей позицией за текущую позицию. Текущая позиция

также перемещается вперед на один символ. Если текущая позиция - конец строки,

меняет местами два символа перед текущей позицией. Отрицательные аргументы не

поддерживаются.

transpose-words (M-t)

Переносит предыдущее слово за слово, на котором (или после которого) стоит

курсор. Курсор перемещается в конец перенесенного слова.

upcase-word (M-u)

Переводит в верхний регистр текущее (или следующее слово). Если указан

отрицательный аргумент, переводит в верхний регистр предыдущее слово, но не

меняет текущей позиции.

downcase-word (M-l)

Переводит в нижний регистр текущее (или следующее слово). Если указан

отрицательный аргумент, переводит в верхний регистр предыдущее слово, но не

меняет текущей позиции.

capitalize-word (M-c)

Начинает с прописной буквы текущее или следующее слово. Если указан

отрицательный аргумент, начинает с прописной буквы предыдущее слово, но

не меняет текущей позиции.

### Удаление и вставка
kill-line (C-k)

Удаляет текст от текущей позиции курсора до конца строки.

backward-kill-line (C-x Backspace)

Удаляет текст до начала строки.

unix-line-discard (C-u)

Удаляет текст от текущей позиции до начала строки. Удаленный текст помещается в

кольцевой буфер.

kill-whole-line

Удаляет все символы текущей строки, независимо от позиции курсора.

kill-word (M-d)

Удаляет символы от курсора до конца слова или, если курсор стоит между словами, до

конца следующего слова. Границы слов определяются так же, как и для

команды forward-word.

backward-kill-word (M-Backspace)

Удаляет слово перед курсором. Границы слова определяются так же,

как и в команде backward-word.

unix-word-rubout (C-w)

Удаляет слово перед курсором, используя в качестве ограничителя слов пробельные

символы. Границы слова, таким образом, отличаются от принятых в команде

backward-kill-word.

delete-horizontal-space (M-\)

Удаляет все пробелы и символы табуляции вокруг текущей позиции.

kill-region

Удаляет весь текст от текущей позиции до отметки (запомненной позиции

курсора). Этот текст называют областью (region).

copy-region-as-kill

Копирует текст области в буфер.

copy-backward-word

Копирует слово перед текущей позицией в буфер. Границы слов определяются так же,

как в команде backward-word.

copy-forward-word

Копирует слово после текущей позиции в буфер. Границы слов определяются так же,

как в команде forward-word.

yank (C-y)

Вставляет верхний элемент кольцевого буфера в позиции курсора.

yank-pop (M-y)

Прокручивает кольцевой буфер и вставляет новый верхний элемент. Работает

только после команды yank или yank-pop.

### Числовые аргументы
digit-argument (M-0, M-1, ..., M--)

Добавляет соответствующую цифру к уже накопленному аргументу или начинает

новый аргумент. M-- начинает отрицательный аргумент.

universal-argument

Это еще один способ задания аргумента. Если после этой команды идет одна

или несколько цифр, возможно, начинающихся со знака минус, эти цифры образуют

аргумент. Если после команды идут цифры, повторное выполнение

universal-argument завершает числовой аргумент, в противном случае -

игнорируется. В качестве специального случая, если сразу после команды идет

символ, отличный от цифры или знака минус, аргумент count для следующей

команды умножается на четыре. Аргумент count первоначально имеет занчение 1,

так что при первом выполнении получается четыре, затем - шестнадцать и так далее.

### Завершение
complete (TAB)

Пытается завершить текст, введенный до текущей позиции.

Командный интерпретатор bash пытается выполнить завершение,

рассматривая текст последовательно как обращение к переменной

(если текст начинается с $), как имя пользователя (если текст начинается

с ~), как имя хоста (если текст начинается с @), или как команду

(включая псевдонимы и функции). Если ни одним из этих способов завершить

строку не удалось, выполняется попытка завершения имени файла.

possible-completions (M-?)

Список возможных завершений текста до текущей позиции.

insert-completions (M-*)

Вставляет все завершения введенного текста, генерируемые командой

possible-completions.

menu-complete

Аналогична команде complete, но заменяет завершаемое слово

первым из возможных завершений. Повторное выполнение команды

menu-complete вставляет следующий элемент из списка возможных завершений.

В конце списка завершений выдается сигнал и восстанавливается исходный

текст. Аргумент n вызывает преход на n позиций вперед в списке завершений;

отрицательный аргумент вызывает переход по списку в обратном направлении.

Предполагается привязка этой команды к клавише TAB, но стандартно она ни к

какой комбинации клавиш не привязана.

delete-char-or-list

Удаляет символ в позиции курсора, если курсор не находится в начале

или в конце строки (аналогично команде delete-char). Если курсор - в конце

строки, ведет себя аналогично команде possible-completions. Эта

команда стандартно ни к какой комбинации клавиш не привязана.

complete-filename (M-/)

Пытается завершить введенный текст до текущей позиции как имя файла.

possible-filename-completions (C-x /)

Выдает возможные завершения текста до текущей позиции, интерпретируемого как

имя файла.

complete-username (M-~)

Пытается завершить введенный текст до текущей позиции как имя пользователя.

possible-username-completions (C-x ~)

Выдает возможные завершения текста до текущей позиции, интерпретируемого как

имя пользователя.

complete-variable (M-$)

Пытается завершить введенный текст до текущей позиции как обращение к

переменной командного интерпретатора.

possible-variable-completions (C-x $)

Выдает возможные завершения текста до текущей позиции, интерпретируемого как

обращение к переменной командного интерпретатора.

complete-hostname (M-@)

Пытается завершить введенный текст до текущей позиции как имя хоста.

possible-hostname-completions (C-x @)

Выдает возможные завершения текста до текущей позиции, интерпретируемого как

имя хоста.

complete-command (M-!)

Пытается завершить введенный текст до текущей позиции как имя команды.

При завершении команд текст сопоставляется последовательно с псевдонимами,

зарезервированными словами, функциями командного интерпретатора,

встроенными функциями командного интерпретатора и, наконец,

с именами выполняемых файлов.

possible-command-completions (C-x !)

Выдает возможные завершения текста до текущей позиции, интерпретируемого как

имя команды.

dynamic-complete-history (M-TAB)

Пытается завершить введенный текст до текущей позиции, сравнивая его

со строками из списка истории выполненных команд в поисках возможных

соответствий.

complete-into-braces (M-{)

Выполняет завершение имени файла и возвращает список возможных завершений

в фигурных скобках, чтобы он мог быть обработан командным интерпретатором

(см. раздел "Подстановка значений в фигурных скобках" ранее).

### Клавиатурные макросы
start-kbd-macro (C-x ()

Начинает запоминание набранных символов в текущий клавиатурный макрос.

end-kbd-macro (C-x ))

Завершает запоминание набранных символов в текущий клавиатурный макрос и

сохраняет его определение.

call-last-kbd-macro (C-x e)

Выполняет последний определенный клавиатурный макрос, выводя символы

макроса так, как если бы они были введены с клавиатуры.

### Прочие команды
re-read-init-file (C-x C-r)

Перечитывает содержимое файла inputrc и учитывает все указанные в нем

привязки клавиш и значения переменных.

abort (C-g)

Прерывает текущую команду редактирования и выдает сигнал терминала

(вид сигнала задается командой bell-style).

do-uppercase-version (M-a, M-b, M-x, ...)

Если символ x, введенный вместе с клавишей Meta, является символом нижнего

регистра, выполнить команду, привязанную к соответствующему символу

в верхнем регистре.

prefix-meta (ESC)

Рассматривать следующий введенный символ как предваренный клавишей Meta.

ESC f эквивалентно Meta-f.

undo (C-_, C-x C-u)

Инкрементная отмена, запоминаемая отдельно для каждой строки.

revert-line (M-r)

Отмена всех изменений текущей строки. Аналогично выполнению команды

undo несколько раз до возвращения строки в исходное состояние.

tilde-expand (M-&)

Выполняет замену тильды в текущем слове.

set-mark (C-@, M-<space>)

Устанавливает метку в текущей позиции. Если задан числовой аргумент, метка

устанавливается в соответствующей позиции.

exchange-point-and-mark (C-x C-x)

Меняет местами метку и текущую позицию. Текущей позицией курсора становится

запомненная в метке, а прежняя позиция курсора запоминается в метке.

character-search (C-])

Читается символ, и курсор переводится на следующее вхождение этого

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

character-search-backward (M-C-])

Читается символ, и курсор переводится на предыдущее вхождение этого

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

insert-comment (M-#)

Значение переменной comment-begin библиотеки readline вставляется в

начало текущей строки, и строка принимается, как если бы была нажата

клавиша Enter. В результате, текущая строка становится комментарием

командного интерпретатора.

glob-expand-word (C-x *)

Слово перед текущей позицией рассматривается как шаблон имен файлов и

вместо него вставляется список соответствующих имен файлов.

glob-list-expansions (C-x g)

Выдается список имен файлов, генерируемых командой

glob-expand-word, а затем снова исходная строка.

dump-functions

Выдает все функции и комбинации клавиш, к которым они привязаны, в

выходной поток readline. Если задан числовой аргумент,

результат форматируется так, что его можно непосредственно включить в файл inputrc.

dump-variables

Выдает все изменяемые переменные readline вместе с их значениями в

выходной поток readline. Если задан числовой аргумент,

результат форматируется так, что его можно непосредственно включить в файл inputrc.

dump-macros

Выдает все комбинации клавиш readline, привязанные к макросам, и

строки, которые выдаются при их нажатии. Если задан числовой аргумент,

результат форматируется так, что его можно непосредственно включить в файл inputrc.

display-shell-version (C-x C-v)

Выдает информацию о версии текущего экземпляра командного интерпретатора bash.

## ИСТОРИЯ ВЫПОЛНЕНИЯ КОМАНД
При включении опции -o history с помощью встроенной команды set,

командный интерпретатор обеспечивает доступ к истории выполнения

команд - списку ранее введенных команд. Текст последних

HISTSIZE команд (по умолчанию - 500) сохраняется в списке истории.

Командный интерпретатор сохраняет в списке истории команды до подстановки

значений параметров и переменных (см. раздел "ЗАМЕНА" ранее),

но после подстановки команд из списка истории, с учетом значений переменных

командного интерпретатора HISTIGNORE и HISTCONTROL. При запуске история

выполнения команд считывается из файла, имя которого задается переменной

HISTFILE (стандартно - ~/.bash_history). Файл HISTFILE при необходимости

усекается, чтобы в нем было не более HISTFILESIZE строк. При завершении работы

интерактивного командного интерпретатора последние

HISTSIZE строк копируются из списка истории выполнения команд

в файл HISTFILE. Если установлена опция командного интерпретатора

histappend (см. описание

команды shopt в разделе

"ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже),

строки добавляются к файлу истории,

иначе файл истории перезаписывается. Если переменная HISTFILE не установлена

или файл истории не доступен на запись, история выполнения команд не

сохраняется. После сохранения истории файл усекается до не более чем

HISTFILESIZE строк. Если переменная HISTFILESIZE не установлена

усечение файла не выполняется.

Встроенная команда fc (см. раздел

"ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже)

может использоваться для выдачи или редактирования и повторного выполнения

части списка истории. Встроенная команда history позволяет

выдавать и изменять список истории выполнения команд, а также

управлять файлом истории. При редактировании командной строки во всех режимах

редактирования доступны команды поиска по списку истории выполнения команд.

Командный интерпретатор позволяет управлять тем, какие команды сохраняются в

списке истории. Переменные HISTCONTROL и HISTIGNORE позволяют ограничить

множество сохраняемых команд. Опция командного интерпретатора

cmdhist, при

включении, заставляет командный интерпретатор пытаться сохранять все строки

многострочной команды в одной записи списка истории, вставляя при необходимости

точки с запятой для обеспечения синтаксической корректности. Опция

командного интерпретатора lithist заставляет сохранять команды со

встроенными переводами встрок вместо вставки точек с запятой. Установка и сброс

опций командного интерпретатора рассмотрены ниже в описании встроенной

команды shopt в разделе

"ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА".

## ПОДСТАНОВКА КОМАНД ИЗ СПИСКА ИСТОРИИ
Командный интерпретатор bash поддерживает возможность подстановки

команд из списка истории, аналогично командному интерпретатору csh.

В этом разделе описан соответствующий синтаксис. Эта возможность

включается по умолчанию для интерактивных командных интерпретаторов

и может быть отключена с помощью опции +H встроенной команды

set (см. раздел

"ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" далее).

Не интерактивные командные интерпретаторы по умолчанию не выполняют

подстановку команд из списка истории.

С помощью этой подстановки слова из списка истории можно вставлять

во входной поток, что упрощает повторение команд, вставку аргументов

предыдущей команды в текущую строку и исправление ошибок в предыдущих

командах.

Подстановка из списка истории выполняется сразу же после считывания

всей строки, прежде чем командный интерпретатор разобъет ее на слова.

Это выполняется в два приема. Сначала определяется, какую строку

из списка истории использовать при подстановке. Затем из этой строки

выбираются части для вставки в текущую строку. Строка, выбираемая из

списка истории, - это событие, а ее части, с которыми происходит

работа, - слова. Для манипулирования выбранными словами поддерживаются

различные модификаторы. Строка разбивается на слова точно так же, как

и при чтении команды, так что несколько слов, разделенных

метасимволами и взятые в кавычки, считаются одним словом.

Подстановка из списка истории инициируется метасимволом подстановки из

списка истории. По умолчанию - это символ !. Замаскировать

этот метасимвол можно только обратной косой (\) и одиночными

кавычками.

Особенностями подстановки из списка истории можно управлять путем

установки ряда опций командного интерпретатора с помощью встроенной

команды shopt. Если установлена опция командного интерпретатора

histverify

(см. описание встроенной команды shopt) и используется

библиотека readline, результаты подстановки из списка истории не

передаются сразу анализатору командного интерпретатора. Вместо этого,

полученная в результате подстановки строка снова загружается в буфер

редактирования readline для дальнейшего изменения. Если используется

библиотека readline и установлена опция командного интерпретатора

histreedit, неудавшаяся подстановка из списка истории команд

будет повторно загружена в буфер редактирования readline для

исправления. Опция -p встроенной команды history

может использоваться для предварительного просмотра результатов подстановки

из списка истории перед ее использованием. Опция -s встроенной команды

history позволяет добавлять команды в

конец списка истории без их фактического добавления, так что их можно будет повторно

использовать в дальнейшем.

Командный интерпретатор позволяет управлять назначением различных

метасимволов, используемых механизмом подстановки команд из списка

истории (см. описание переменной histchars ранее в разделе

"Переменные командного интерпретатора").

### Пометки событий
Пометка события - это ссылка на элемент командной строки в списке

истории.

!

Начинает подстановку из списка выполненных команд, если только

далее не идет пробел, перевод строки, = или (.

!n

Ссылка на командную строку n.

!-n

Ссылка на текущую строку минус n.

!!

Ссылка на предыдущую команду. Это синоним для команды !-1.

!строка

Ссылка на самую недавнюю команду, начинающуюся со строки.

!?строка[?]

Ссылка на самую недавнюю команду, содержащую строку. Завершающий символ

? можно не указывать, если сразу после строки идет новая строка.

^строка1^строка2^

Быстрая подстановка. Повторить последнюю команду, заменяя

строку1 строкой2. Аналогично !!:s/строка1/строка2/

(см. подраздел "Модификаторы" ниже).

!#

Вся набранная до этого момента командная строка.

### Пометки слов
Пометки слов (word designators) используются для выбора необходимых слов из события.

Двоеточие (:) отделяет пометку слова от спецификации события. Двоеточие можно

не указывать, если пометка слова начинается символом

^, $, *, - или %. Слова нумеруются с начала строки,

причем первое слово имеет номер 0. Слова вставляются в текущую строку через один пробел.

0

Нулевое слово. Для командного интерпретатора это - имя команды.

n

n-ное слово.

^

Первый аргумент. Т.е. слово 1.

$

Последний аргумент.

%

Слово, сопоставившееся при последнем поиске '?строка?'.

x-y

Диапазон слов; '-y' - это сокращение для '0-y'.

*

Все слова, кроме нулевого. Это синоним '1-$'.

Вполне допустимо использовать * если в событии есть всего одно слово -

в этом случае возвращается пустая строка.

x*

Сокращение для x-$.

x-

Сокращенная форма для x-$, аналогично x*, но не включая последнее слово.

Если пометка слова указана без спецификации события, в качестве

события используется предыдущая команда.

### Модификаторы
После необязательной пометки слова может идти последовательность одного или

нескольких следующих модификаторов, предваряемых двоеточием - ':'.

h

Удаляет последний компонент имени файла, оставляя только начало.

t

Удаляет все начальные компоненты имени файла, оставляя только последний.

r

Удаляет хвостовой суффикс вида .xxx, оставляя базовое имя файла.

e

Удаляет все, кроме хвостового суффикса.

p

Выдает новую команду на экран, но не выполняет ее.

q

Берет подставляемые слова в кавычки для предотвращения дальнейших подстановок.

x

Берет подставляемые слова в кавычки, как и модификатор q, но разбивает на

слова по пробелам и символам новой строки.

s/old/new/

Подставляет new вместо первого вхождения old в строке события. Вместо

/ можно использовать любой ограничитель. Завершающий ограничитель не

обязателен, если он является последним символом в строке события.

Ограничитель в строках old и new можно маскировать обратной косой.

Если в строке new есть метасимвол &, он заменяется строкой old.

Обратная косая маскирует метасимвол &. Если строка old - пустая,

вместо нее используется строка из последней по времени подстановки или,

если подстановок из списка истории ранее не было, последняя строка,

искавшаяся с помощью конструкции !?строка[?].

&

Повторяет предыдущую подстановку.

g

Применяет изменения ко всей строке события. Этот модификатор используется

совместно с ':s' (например, ':gs/old/new/') или ':&'. При использовании

с ':s', вместо косой (/) можно указывать любой ограничитель, а завершающий

ограничитель указывать не обязательно, если он является последним символом

в строке события.

## ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА
Если явно не указано иначе, каждая из описанных в этом разделе

встроенных команд, принимающих опции, начинающиеся с дефиса (-),

распознает два дефиса (--) как признак завершения опций.

: [аргументы]

Никакого эффекта; команда не делает ничего,

кроме подстановки аргументов и выполнения указанных перенаправлений.

Возвращает нулевой код возврата.

. имя_файла [аргументы]

source имя_файла [аргументы]

Читает и выполняет команды из указанного файла в среде текущего командного

интерпретатора и возвращает статус выхода последней выполненной команды из

файла. Если имя_файла не содержит косой черты, файл ищется в каталогах,

перечисленных в переменной PATH. Искомый файл не обязательно должен быть

выполняемым. Если ни в одном из каталогов, перечисленных в PATH, файл с

указанным именем не найден, он ищется в текущем каталоге. Если отключена

опция sourcepath встроенной

команды shopt, перечисленные в PATH каталоги не

просматриваются. Если переданы аргументы, они становятся позиционными

параметрами при выполнении файла. Иначе значения позиционных параметров не

изменяются. Статусом выхода становится статус последней выполненной в

сценарии команды (статус выхода равен 0, если ни одна команда не выполнялась),

или 1, если файл не найден или не может быть прочитан.

alias [-p] [имя[=значение] ...]

Команда alias без аргументов или с опцией -p выдает список псевдонимов команд в

виде alias имя=значение в стандартный выходной поток. Если переданы

аргументы, каждое имя, для которого задано значение, становится псевдонимом.

Если значение завершается пробелом, в следующем слове при подстановке будет

выполняться замена псевдонима. Для каждого имени в списке аргументов без

соответствующего значения выдается имя и значение соответствующего

псевдонима. Команда alias возвращает истину, если только не задано имя, не

являющееся именем псевдонима.

bg [задание]

Возобновляет выполнение указанного задания в фоновом режиме, как если бы оно

было запущено с конструкцией &. Если задание не указано, в фоновый режим

переводится текущее задание командного интерпретатора. Команда bg задание

возвращает 0, если только управление заданиями не отключено или, при

включенном управлении заданиями, соответствующее задание не найдено или

запускалось при отключенном управлении заданиями.

bind [-m keymap] [-lpsvPSV]

bind [-m keymap] [-q функция] [-u функция] [-r keyseq]

bind [-m keymap] -f имя_файла

bind [-m keymap] keyseq:имя_функции

Выдает текущие привязки клавиш и функций библиотеки readline или привязывает

комбинацию клавиш к функции или макросу readline. При этом поддерживается

такой же синтаксис привязки, как и в файле .inputrc, но каждая привязка должна

передаваться как отдельный аргумент; т.е. '"\C-x\C-r": re-read-init-file'.

Опции, если они переданы, имеют следующие значения:

-m keymap

Использовать набор привязок для последующих привязок. Допускаются имена

привязок emacs, emacs-standard, emacs-meta, emacs-ctlx,

vi, vi-command и vi-insert. vi

эквивалентно vi-command; emacs эквивалентно emacs-standard.

-l

Список имен всех функций readline.

-p

Выдает имена функций и привязки readline так, чтобы их можно было прочитать

повторно.

-P

Выдает текущие имена функций и привязки readline.

-v

Выдает имена и значения переменных readline так, чтобы их можно было

прочитать повторно.

-V

Выдает имена и значения текущих переменных readline.

-s

Выдает комбинации клавиш readline, привязанные к макросам, и выдаваемые при

их нажатии строки так, чтобы их можно было прочитать повторно.

-S

Выдает комбинации клавиш readline, привязанные к макросам, и выдаваемые при

их нажатии строки

-f имя_файла

Читать привязки клавиш из указанного файла.

-q функция

Выдает комбинации клавиш, привязанные к указанной функции.

-u функция

Снять все привязки комбинаций клавиш к указанной функции.

-r keyseq

Удалить привязку к указанной комбинации клавиш keyseq.

Команда возвращает значение 0, кроме случаев, когда передана нераспознанная опция или

произошла ошибка.

break [n]

Выход из цикла for, while,

until или select.

Если значение n указано, выход из n

уровней циклов. n должно быть больше 1. Если значение n превышает количество

вложенных циклов, происходит выход из всех циклов. Команда возвращает

значение 0, если только не выполнена вне цикла.

builtin встроенная_команда [аргументы]

Выполняет указанную встроенную_команду интерпретатора, передает ей

аргументы и возвращает ее статус выхода. Это полезно при определении функции,

имя которой совпадает с именем встроенной команды интерпретатора так, чтобы

можно использовать вызов встроенной команды в функции. Обычно так

переопределяется встроенная команда cd. Если указанная команда не является

встроенной командой интерпретатора, возвращается статус 1.

cd [-LP] [каталог]

Делает указанный каталог текущим. Стандартный каталог хранится в переменной

HOME. Пременная CDPATH определяет пути поиска каталогов, содержащих

указанный каталог.

Альтернативные имена каталогов в значении CDPATH разделяются двоеточием

(:). Пустое имя каталога в CDPATH соответствует текущему каталогу, т.е. ".".

Если каталог начинается с косой черты (/), то значение переменной CDPATH не

используется. Опция -P требует использовать физическую структуру каталогов

вместо следования по символьным связям (см. также опцию -P встроенной

команды set);

опция -L требует следовать по символьным связям. Аргумент -

эквивалентен $OLDPWD. При успешной смене текущего каталога возвращается

значение 0, в противном случае - 1.

command [-pVv] команда [аргумент ...]

Выполняет команду с аргументами, не выполняя обычный поиск функций

командного интерпретатора. Выполняются только встроенные команды или

команды, которые находятся в указанных в переменной PATH каталогах. Если

задана опция -p, поиск команды выполняется по стандартному значению

переменной PATH, гарантирующему, что будут найдены все стандартные утилиты.

Если указана опция -V или -v, выдается описание команды. Опция -v выдает одно

слово - имя команды или имя файла, представляющего команду; опция -V дает

немного более детальное описание. Если указана опция -V или -v, статус выхода

будет 0, если команда найдена, и 1 в противном случае. Если ни одна из этих

опций не задана и возникла ошибка или команду не удалось найти, будет получен

статус выхода 127. В противном случае статусом выхода встроенной команды

command является статус выхода выполненной команды.

continue [n]

Перейти к следующей итерации цикла for,

while, until или

select. Если указано

значение n, перейти к следующей итерации n-го внешнего цикла. Значение n

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

выполняется следующая итерация самого внешнего цикла (цикла "верхнего

уровня"). Возвращается значение 0, если только команда не вызвана вне цикла

declare [-afFirx] [-p] [имя[=значение]]

typeset [-afFirx] [-p] [имя[=значение]]

Объявляет переменные и/или задает их атрибуты. Если имена не заданы, выдаются

значения переменных. Опция -p будет выдавать атрибуты и значения переменных с

указанными именами. Когда используется опция -p, остальные опции

игнорируются. Опция -F запрещает выдачу определений функций; выдаются

только имена и атрибуты функций. Опция -F автоматически устанавливает -f.

Следующие опции можно использовать для выдачи переменных только с

указанными атрибутами или для задания атрибутов переменных:

-a

Каждое имя - переменная типа массив (см. раздел "Массивы" ранее).

-f

Использовать только имена функций.

-i

Переменная считается целочисленной; при присваивании переменной значения

вычисляются арифметические выражения (см. раздел

"ВЫЧИСЛЕНИЕ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ").

-r

Делает соответствующие переменные доступными только для чтения. Этим

переменным нельзя присваивать значения в следующих операторах и их нельзя

сбрасывать.

-x

Помечает имена для экспортирования в среду для последующих команд.

При задании '+' вместо '-' атрибут сбрасывается, за исключением того, что опцию

+a нельзя использовать для уничтожения массива. При использовании в функции,

команда делает каждую опцию локальной, как и команда local. Возвращается

значение 0, если только не указана недействительная опция, не делается попытка

определить функцию с помощью конструкции "-f foo=bar", не делается попытка

присвоить значение переменной, доступной только для чтения, не делается

попытка присвоить значение массиву без использования конструкции

присваивания для массива (см. раздел "Массивы" ранее),

не используется имя

несуществующей переменной командного интерпретатора, не выполняется

попытка отменить статус только для чтения переменной, созданной как доступная

только для чтения, не делается попытка отменить статус массива для переменной

типа массив, и не предлагается выдать определение несуществующей функции с

помощью опции -f.

dirs [-clpv] [+n] [-n]

Без опций эта команда выдает список текущих запомненных каталогов. По

умолчанию каталоги выдаются в одну строку через пробел. Каталоги добавляются

в список с помощью команды pushd;

команда popd удаляет записи из списка.

+n

Выдает n-ную запись слева списка, выдаваемого командой dirs при вызове без

опций. Нумерация начинается с нуля.

-n

Выдает n-ную запись справа списка, выдаваемого командой dirs при вызове без

опций. Нумерация начинается с нуля.

-c

Очищает стек каталогов, удаляя все записи.

-l

Выдает более длинный листинг; в стандартном формате листинга для обозначения

начального каталога используется тильда.

-p

Выдает стек каталогов по одной записи в строку.

-v

Выдает стек каталогов по одной записи в строку, выдавая индекс записи перед

каждой записью.

Если не указана недопустимая опция, и индекс n не выходит за пределы стека,

возвращается значение 0.

disown [-ar] [-h] [задание ...]

При вызове без опций каждое указанное задание удаляется из таблицы активных

заданий. Если задана опция -h, задания не удаляются из таблицы, а помечаются так,

что сигнал SIGHUP не посылается заданию при получении сигнала SIGHUP командным

интерпретатором. Если задание не указано и не заданы опции -a и -r,

используется текущее задание. Если задание не указано, опция -a

означает удалить или пометить все

задания; опция -r без аргумента задание ограничивает действие выполняющимися

заданиями. Команда возвращает значение 0, если только не указано несуществующее

задание.

echo [-neE] [аргумент ...]

Выдает аргументы через пробел, дополняя в конце символом новой строки. Статус

возврата - всегда 0. Если указана опция -n, символ новой строки не выдается. Если

указана опция -e, включается интерпретация следующих управляющих комбинаций

символов с обратной косой. Опция -E отключает интерпретацию этих управляющих

последовательностей даже в системах, где они интерпретируются по умолчанию.

Команда echo не интерпретирует -- как признак завершения опций. Команда echo

интерпретирует следующие управляющие последовательности:

\a

сигнал (звонок)

\b

забой

\c

не выводить завершающие символы новой строки

\\

управляющий символ

\f

прогон страницы

\n

новая строка

\r

возврат каретки

\t

горизонтальная табуляция

\v

вертикальная табуляция

\обратная косая

\nnn

символ, ASCII-код которого - восьмеричное значение nnn (от одной до трех цифр)

\xnnn

символ, ASCII-код которого - шестнадцатеричное значение nnn (от одной до трех

цифр)

enable [-adnps] [-f имя_файла] [имя ...]

Включает и отключает встроенные команды интерпретатора. Отключение встроенной

команды позволяет выполнять без указания полного имени файл на диске, имя

которого совпадает со встроенной командой, хотя обычно встроенные команды

просматриваются первыми. Если используется опция -n, указанные по именам

команды отключаются, в противном случае они влючаются. Например, чтобы

использовать двоичную программу test, которая находится в одном из указанных в

переменной PATH каталогов, вместо встроенной версии интерпретатора, выполните

enable -n test. Опция -f требует загрузить новую встроенную команду с указанным

именем из заданного разделяемого объектного файла в системах, поддерживающих

динамическую загрузку. Опция -d удаляет встроенную команду, ранее загруженную с

помощью опции -f. Если имена не заданы или если указана опция -p,

выдается список встроенных команд интерпретатора. При отсутствии других опций и аргументов этот

список содержит все включенные встроенные команды интерпретатора. Если опция -n

не указана, выдаются только отключенные встроенные команды. Если указана опция

-a, выдаваемый список включает все встроенные команды с признаком включена или

отключена. Если указана опция -s, выдаются только встроенные команды,

предполагаемые стандартом POSIX. Возвращается значение 0, если только имя

являеся именем встроенной команды интерпретатора и не возникла проблема при

загрузке новой встроенной команды из разделямого объектного файла.

eval [аргумент ...]

Аргументы читаются и соединяются в единую команду. Эта команда затем читается и

выполняется командным интерпретатором, а ее статус выхода возвращается в

качестве значения команды eval. Если аргументов нет или все аргументы пустые,

команда eval возвращает 0.

exec [-cl] [-a имя] [команда [аргументы]]

Если указана команда, она заменяет командный интерпретатор. При этом новый

процесс не создается. Аргументы становятся аргументами команды. Если указана

опция -l, командный интерпретатор помещает дефис в качестве нулевого аргумента,

передаваемого команде. Именно так делает команда

login(1).

Опция -c вызывает

выполнение команды с пустой средой. Если указана опция -a, командный

интерпретатор передает имя как нулевой аргумент выполняемой команде. Если

команда не может быть выполнена по той или иной причине, неинтерактивный

командный интерпретатор завершает работу, если только не включена опция

интерпретатора execfail, - в этом случае команда возвращает

код ошибки. Интерактивный командный интерпретатор возвращает код ошибки если файл не

может быть выполнен. Если команда не указана, любые перенаправления срабатывают

в текущем командном интерпретаторе и статус выхода будет 0. Если при

перенаправлении произошла ошибка, статус выхода будет 1.

exit [n]

Вызывает завершение работы командного интерпретатора со статусом n. Если

значение n не указано, статусом выхода будет статус выхода последней выполненной

команды. Перед заврешением работы интерпретатора срабатыват обработчик сигнала

EXIT.

export [-fn] [имя[=слово]] ...

export -p

Указанные имена помечаются для автоматического экспортирования в среду

следующих выполняемых команд. Если указана опция -f, экспортируются имена

функций. Если имена не указаны или задана опция -p, выдается список всех имен,

экспортированных данным командным интерпретатором. Опция -n вызывает удаление

признака экспортирования с указанных переменных. Команда export возвращает

сатутус выхода 0, если только не указана недопустимая опция, имя несуществующей

переменной или в опции -f не указано имя, не являющееся именем функции.

fc [-e редактор] [-nlr] [первая] [последняя]

fc -s [pat=rep] [команда]

Исправить команду. Первая форма выбирает диапазон команд, от первой до

последней, из списка истории выполнения. Первую и последнюю команду можно

задавать строкой (найти последнюю команду, начинающуюся с соответствующей

строки) или числом (индекс в списке истории, причем отрицательные значения

используются как смещение от номера текущей команды). Если последняя не указана,

при выдаче последней считается текущая команда (так что fc -l -10 выдает последних

10 команд), а для остальных опций предполагается, что последняя совпадает с первой.

Если первая не указана, ею становится предыдущая команда при редактировании и -16

(шестнадцатая с конца списка истории) при выдаче.

Опция -n подавляет выдачу номеров команд. Опция -r изменяет порядок выдачи

команд на противоположный. Если указана опция -l, команды выдаются в стандартный

выходной поток. В противном случае вызывается указанный редактор, которому

передается файл с соответствующими командами. Если редактор не задан,

используется значение переменной FCEDIT или значение переменной EDITOR, если

FCEDIT не установлена. Если не установлены обе переменные, используется редактор

vi. По завершении редактирования, отредактированные команды выдаются и

выполняются.

Вторая форма требует повторного выполнения команды после замены каждого

вхождения pat на rep. Полезно задать псевдоним "r=fc -s",

так что при наборе "r cc" будет выполнена последняя команда, начинавшаяся

со строки "cc", а при вводе "r" будет повторно выполняться последняя команда.

Если используется первая форма, команда возвращает значение 0, если только не

указана недопустимая опция или первая или последняя команда выходит за пределы

номеров команд в списке истоии. Если указана опция -e, возвращается статус выхода

последней выполненной команды или ошибка, произошедшая при работе с временным

файлом команд. Если используется вторая форма, возвращается статус выхода

повторно выполненной команды, если только команда не задает несуществующую

строку в списке истории, - в этом случае команда fc возвращает 1.

fg [задание]

Возобновляет работу задания в приоритетном режиме и делает это задание

текущим. Если задание не указано, используется текущее задание командного интерпретатора. Возвращается значение статуса выхода команды, переведенной в приоритетный

режим, или 1 если управление заданиями отключено или, при включенном управлении

заданиями, если указано несуществующее задание или задание, запущенное при

отключенном управлении заданиями.

getopts строка_опций имя [аргументы]

Команда getopts используется процедурами командного интерпретатора для разбора

позиционных параметров. Строка_опций содержит буквы опций, которые необходимо

распознать; если после буквы указано двоеточие, предполагается, что у опции должен

быть аргумент, отделяемый от нее пробельным символом. При каждом вызове команда

getopts помещает в переменную интерпретатора с указанным именем очередную

опцию, создавая переменную, если она еще не существует, а индекс следующего

аргмента - в переменную OPTIND. OPTIND получает значение 1 при каждом вызове

командного интерпретатора или сценария. Если опция должна иметь аргумент,

команда getopts помещает этот аргумент в переменную OPTARG. Командный

интерпретатор не сбрасывает значение OPTIND автоматически. Между вызовами

команды getopts в том же командном интерпретаторе, если необходимо использовать

новый набор параметров, надо сбрасывать это значение явно.

Когда все опции обработаны, команда getopts завершает работу со значением,

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

опцией, а переменная имя получает значение ?.

Команда getopts обычно обрабатывает позиционные параметры, но если заданы

аргументы, getopts разбирает их.

Команда getopts может сообщать об ошибках двумя способами. Если первый символ

строки_опций - двоеточие, используется немногословное информирование об

ошибках. При обычной работе выдаются диагностические сообщения, если

обнаруживаются недопустимые опции или недостающие аргументы. Если переменная

OPTERR имеет значение 0, сообщения об ошибках не выдаются, даже если первым

символом строки_опций не является двоеточие.

Если обнаружена недопустимая опция, getopts помещает ? в переменную

имя и, если не задано немногословное информирование, выдает сообщение об ошибке и

сбрасывает переменную OPTARG. Если getopts работает в режиме немногословного

информирования, символ опции помещается в переменную OPTARG и никакие

диагностические сообщения не выдаются.

Если обязательный аргумент не обнаружен, и для getopts не задано немногословное

информирование, переменная имя получает значение ?, переменная OPTARG

сбрасывается, и выдается диагностическое сообщение. Если getopts работает в режиме

немногословного информирования, переменная имя получает значение :, а в

переменную OPTARG помещается символ опции.

Команда getopts возвращает 0, если опция, указанная или не указанная, обнаружена.

Она возвращает ложь, если достигнут конец опций или произошла ошибка.

hash [-r] [-p имя_файла] [имя]

Для каждого имени определяется и запоминается полное имя команды

путем поиска в каталогах, перечисленных в переменной $PATH.

Если указана опция -p, поиск по каталогам не выполняется, и указанное

имя файла используется как полное имя команды. Опция -r вызывает

сброс всех запомненных имен. Если аргументы не заданы, выдается

информация о запомненных командах. Статус выхода - истина, если

только имя удалось найти и не указана недопустимая опция.

help [шаблон]

Выдает полезную информацию о встроенных командах. Если шаблон указан,

команда help выдает детальную справочную информацию о всех командах,

соответствующих шаблону; в противном случае, выдается справка по всем

встроенным командам и управляющим структурам интерпретатора. Статус

выхода - 0, если удалось найти команду, соответствующую шаблону.

history [-c] [n]

history -anrw [имя_файла]

history -p аргумент [аргумент ...]

history -s аргумент [аргумент ...]

Если опции не указаны, выдает список истории команд с номерами строк.

Строки, для которых указана звездочка (*), были изменены.

При указании аргумента n выдаются только последние n строк.

Если указано имя_файла, список истории берется из этого файла; если файл

не указан, используется значение переменной HISTFILE.

Опции имеют следующие значения:

-a

Добавлять "новые" строки истории (строки истории, введенные с начала

текущего сеанса bash) в файл истории.

-n

Читать строки истории, еще не прочитанные из файла истории, в текущий список

истории команд. Речь идет о строках, добавленных в файл истории с начала

текущего сеанса bash.

-r

Читать содержимое файла истории и использовать его в качестве текущего списка

истории выполнения команд.

-w

Записывать текущий список истории команд в файл истории, переписывая его

текущее содержимое.

-c

Очистить список истории выполнения команд, удаляя все записи.

-p

Выполнить подстановку из списка истории для последующих аргументов и выдать

результат в стандартный выходной поток. Результат не запоминается в

списке истории. Для отключения обычной подстановки из списка истории,

необходимо маскировать (брать в кавычки) каждый аргумент.

-s

Сохранить аргументы в списке истории как одну запись. Последняя команда

в списке истории удаляется перед добавлением аргументов.

Возвращается значение 0, если не передана недопустимая опция

или при попытке чтения или записи файла истории не произошла ошибка.

jobs [-lnprs] [ задание ... ]

jobs -x команда [ аргументы ... ]

Первое из списка активных заданий. Опции имеют следующие значения:

-l

Помимо обычной информации выдает идентификаторы процессов.

-p

Выдает только идентификаторы процессов-лидеров групп процессов, образующих

задание.

-n

Выдает информацию только о заданиях, состояние которых изменилось с момента

последнего уведомления пользователя о состоянии заданий.

-r

Выдает только выполняющиеся задания.

-s

Выдает только остановленные задания.

Если указано задание, выдается информация только об этом задании.

Статус выхода - 0, кроме случаев, когда указана недопустимая опция или идентификатор

несуществующего задания.

Если указана опция -x, команда jobs заменяет любой идентификатор

задания в команде или аргументах соответствующим идентификатором группы

процессов, и выполняет команду, передавая ей аргументы и возвращая ее статус выхода.

kill [-s сигнал | -n номер_сигнала | -сигнал] [идентификатор_процесса | задание] ...

kill -l [сигнал | статус_выхода]

Посылает указанный по имени или номеру сигнал процессам с указанными

идентификаторами или входящим в задание с указанным идентификатором.

Сигнал задается либо по имени, например, SIGKILL, либо по номеру.

Если сигнал задается по имени, имя может включать префикс SIG, а может

и не включать. Если сигнал не задан явно, предполагается сигнал

SIGTERM. При указании опции -l выдаются имена сигналов.

Если при указании опции -l заданы аргументы, выдаются только имена

сигналов, соответствующих аргументам, и возвращается статус 0.

Аргумент статус_выхода опции -l - число, задающее либо номер сигнала,

либо статус выхода процесса, прерванного этим сигналом. Команда kill

возвращает истину, если, по крайней мере, один сигнал был послан

успешно, или ложь, если возникла ошибка или была указана недопустимая опция.

let аргумент [аргумент ...]

Каждый аргумент - арифметическое выражение, которое необходимо

вычислить (см. раздел "ВЫЧИСЛЕНИЕ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ").

Если последний аргумент имеет значение 0, команда let возвращает 1,

в противном случае, она возвращает зачение 0.

local [имя[=значение] ...]

Для каждого аргумента создается локальная переменная с указанным

именем, получающая соответствующее значение. Когда команда local

используется в функции, она ограничивает область действия этой

переменной соответствующей функцией и вызванными из нее функциями.

При вызове без операндов команда local выдает список локальных

переменных в стандартный выходной поток. Использование команды

local вне функции - ошибка. Статус возврата - 0, если только

команда local не использована вне функции или не передано

недопустимое имя.

logout

Выход из начального командного интерпретатора.

popd [-n] [+n] [-n]

Удаляет записи из стека каталогов. При вызове без аргументов

удаляет верхний каталог из стека и выполняет переход в новый

верхний каталог. Аргументы имеют следующие значения:

+n

Удаляет n-ную запись слева списка каталогов, начиная с нуля.

Например: "popd +0" удаляет первый каталог, а "popd +1" - второй.

-n

Удаляет n-ную запись справа списка каталогов, начиная с нуля.

Например: "popd -0" удаляет последний каталог, а

"popd -1" - предпоследний.

-n

Подавляет обычное измнение текущего каталога при удалении каталогов

из стека, так что изменяется только содержимое стека.

Если команда popd завершается успешно, выполняется также команда

dirs и возвращается статус 0. Команда popd возвращает ложь,

если выявлена недопустимая опция, стек каталогов - пустой, указана

несуществующая запись в стеке каталогов или не удалось перейти в

соответствующий каталог.

printf формат [аргументы]

Выдает аргументы в соответствии с форматом в стандартный

выходной поток. Формат - строка символов, содержащая три

типа объектов: обычные символы, которые просто копируются

в стандартный выходной поток, управляющие последовательности

символов, преобразуемые и копируемые в стандартный выходной поток, и

спецификации формата, каждая из которых вызывает выдачу последующего

аргумента. Помимо стандартных форматов printf(1), спецификатор %b

вызывает замену управляющих последовательностей, начинающихся с

обратной косой, а спецификатор %q требует выдать соответствующий

аргумент в формате, который можно повторно использовать в качестве

входных данных командного интерпретатора.

Формат при необходимости используется повторно, чтобы покрыть все

аргументы. Если формат требует больше аргументов, чем передано,

дополнительные спецификации формата раскрываются как если бы были

переданы нулевые значения или пустые строки, соответственно.

pushd [-n] [каталог]

pushd [-n] [+n] [-n]

Добавляет каталог на вершину стека каталогов или прокручивает стек, делая новый

верхний элемент стека текущим рабочим каталогом. При вызове без аргументов,

меняет местами два верхних каталога и возвращает 0, если

стек каталогов не пустой. Аргументы имеют следующие значения:

+n

Прокручивает стек так, что n-ный каталог (при подсчете слева

по списку каталогов, начиная с 0) становится вершиной.

-n

Прокручивает стек так, что n-ный каталог (при подсчете справа

по списку каталогов, начиная с 0) становится вершиной.

-n

Эта опция подавляет обычный переход в каталог при добавлении каталогов в

стек, так что действия выполняются только со стеком.

каталог

Добавляет каталог на вершину стека каталогов, делая его текущим

рабочим каталогом.

Если команда pushd выполнена успешно, выполняется также команда

dirs. Если

используется первая форма, pushd возвращает 0 за исключением случая,

когда не удалось перейти в каталог. При использовании второй формы

pushd возвращает 0, если только стек каталогов не пустой, не указан несуществующий

элемент стека и удалось перейти в новый текущий каталог.

pwd [-LP]

Выдает полное имя текущего каталога. Выдаваемое имя файла не содержит символьных

связей, если указана опция -P или включена опция -o physical

встроенной команды set. Если использована опция

-L, выполняется проход по символьным связям. Статус выхода - 0, если не

возникла ошибка при чтении имени текущего каталога или не передана недопустимая опция.

read [-er] [-a имя_массива] [-p приглашение] [имя ...]

Читает одну строку из стандартного входного потока и присваивает первое слово

первому имени, второе слово - второму имени, и так далее, так что оставшиеся слова

вместе с разделителями между ними присваиваются в качестве значения последнему

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

имена получают пустые значения. Для разбиения строки на слова используются символы,

указанные в значении переменной IFS. Символ обратной косой (\) можно использовать

для литеральной интерпретации следующего прочитанного символа и для продолжения ввода

на следующей строке. Опции имеют следующие значения:

-r

Обратная косая не обрабатывается как символ маскировки. Она считается частью строки.

В частности, для продолжения на следующей строке нельзя использовать пару

обратная косая/новая строка.

-p

Выдает приглашение, без завершающего перевода строки, перед чтением входного

потока. Приглашение выдается только если входные данные идут с терминала.

-a

Слова присваиваются последовательным элементам массива имя_массива, начиная с 0.

Имя_массива сбрасывается перед присваиванием новых значений. Другие имена в аргументах игнорируются.

-e

Если стандартный входной поток идет с терминала, для получения строки используется

библиотека readline (см. раздел "БИБЛИОТЕКА READLINE" ранее).

Если имена не указаны, прочитанная строка присваивается переменной REPLY.

Статус выхода - 0, если только не встретился символ конца файла.

readonly [-apf] [имя ...]

Указанные имена помечаются как доступные только для чтения; значения соответствующих

переменных нельзя изменять в дальнейшем с помощью присваивания. Если указана опция

-f, функции, соответствующие именам, тоже помечаются. Опция -a ограничивает

действие только массивами. Если ни одно имя не указано или задана опция -p,

выдается список имен, доступных только для чтения. Опция -p вызывает выдачу

результатов в формате, который можно использовать как входной. Статус выхода - 0,

если только не передана недопустимая опция, одно из имен не является именем

переменной или опция -f не указана перед именем, не являющимся именем функции.

return [n]

Вызывает завершение работы функции с указанным статусом выхода n. Если n не указано,

возвращается статус выхода последней команды, выполненной в теле функции. При использовании вне функции, но в ходе выполнения сценария командой . (source),

вызывает прекращение выполнения сценария и возврат либо значения n, либо

статуса выхода последней команды сценария. При использовании вне функции и не при

выполнении сценария командой ., возвращает 1.

set [--abefhkmnptuvxBCHP] [-o опция] [аргумент ...]

При вызове без опций выдает имя и значение всех переменных командного интерпретатора в виде, пригодном для повторного выполнения присваиваний. Результат отсортирован по

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

аргументы присваиваются последовательно в качестве значений позиционным параметрам

$1, $2,... $n. Опции имеют следующие значения:

-a

Автоматически помечать изменяемые или создаваемые переменные как экспортируемые

в среду для последующих команд.

-b

Сообщать о состоянии прерванных фоновых заданий немедленно, а не перед выдачей

следующего первичного приглашения. Эта опция действует только если включено управление

заданиями.

-e

Немедленно завершать работу, если простая команда

(см. раздел "СИНТАКСИС КОМАНД" ранее)

завершает работу с ненулевым статусом выхода. Работа командного интерпретатора не

завершается, если закончившаяся неудачно команда является частью

цикла until или while,

частью оператора if, частью списка && или ||, или

если к статусу выхода команды применяется отрицание с помощью оператора !.

-f

Отключить подстановку имен файлов.

-h

Запоминать местонахождение команд, найденное при выполнении. Эта опция включена по

умолчанию.

-k

Помещать в среду все аргументы в виде операторов присваивания, а не только

предшествующие имени команды.

-m

Режим мониторинга. Управление заданиями включено. Эта опция стандартно устанавливается

для интерактивных командных интерпретаторов в системах, где управление заданиями

поддерживается (см. раздел

"УПРАВЛЕНИЕ ЗАДАНИЯМИ" ранее). Фоновые процессы

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

при завершении их работы.

-n

Читать команды, но не выполнять их. Эту опцию можно использовать для проверки

наличия синтаксических ошибок в сценариях командного интерпретатора. Интерактивные

командные интерпретаторы ее игнорируют.

-o имя_опции

Имя_опции может иметь одно из следующих значений:

allexport

То же, что и опция -a

braceexpand

То же, что и опция -B

emacs

Использовать интерфейс редактирования командной строки в стиле редактора emacs.

Эта опция установлена по умолчанию в интерактивных командных интерпретаторах, если

только они не запущены с опцией --noediting

errexit

То же, что и опция -e

hashall

То же, что и опция -h

histexpand

То же, что и опция -H

history

Включить поддержку истории выполнения команд, как описано ранее

в разделе "ИСТОРИЯ ВЫПОЛНЕНИЯ КОМАНД".

Эта опция установлена по умолчанию для интерактивных командных интерпретаторов.

ignoreeof

Результат такой же, как и после выполнения команды IGNOREEOF=10 (см. раздел

"Переменные командного интерпретатора" ранее)

keyword

То же, что и опция -k

monitor

То же, что и опция -m

noclobber

То же, что и опция -C

noexec

То же, что и опция -n

noglob

То же, что и опция -f

notify

То же, что и опция -b

nounset

То же, что и опция -u

onecmd

То же, что и опция -t

physical

То же, что и опция -P

posix

Изменяет поведение bash на соответствующее стандарту

POSIX 1003.2, там, где оно отличается

privileged

То же, что и опция -p

verbose

То же, что и опция -v

vi

Использовать интерфейс редактирования командной строки в стиле редактора vi.

xtrace

То же, что и опция -x.

Если указана опция -o без имени_опции, выдаются значения текущих установленных опций.

Если указана опция +o без имени_опции, в стандартный выходной поток выдается набор

команд set, необходимый для воссоздания текущего набора опций.

-p

Включить привилегированный режим. В этом режиме файлы $ENV и $BASH_ENV не

обрабатываются, функции командного интерпертатора не наследуются из среды, а переменная

среды SHELLOPTS игнорируется. Если командный интерпретатор запущен с эффективным

идентификатором пользователя (группы), не совпадающим с реальным, а опция -p не

задана, выполняются перечилсенные действия и эффективный идентификатор

устанавливается равным реальному. Если опция -p задана при запуске, эффективный

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

-t

Завершить после чтения и выполнения одной команды.

-u

При подстановке значений параметров рассматривать не установленную переменную как

ошибку. При попытке подстановки значения не существующей переменной командный

интерпретатор выдает сообщение об ошибке и, если он - не интерактивный, завершает

работу с ненулевым статусом выхода.

-v

Выдавать строки команд по мере чтения.

-x

После подстановок в каждой простой команде выдавать значение переменной PS4, а затем -

команду с результатами подстановок в аргументах.

-B

Выполнять подстановку квадратных скобок в командном интерпретаторе (см. раздел

"Подстановка выражений в скобках" ранее).

Эта опция установлена по умолчанию.

-C

Если эта опция установлена, bash не переписывает существующий файл при перенаправлениях

с помощью операторов >, >& и <>. Это поведение можно

переопределить при создании выходных файлов, применяя оператор перенаправления

|> вместо >.

-H

Включить подстановку из списка истории с помощью метасимвола !. Эта опция

по умолчанию установлена в интерактивных командных интерпретаторах.

-P

Если эта опция установлена, командный интерпретатор не следует по символьным

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

он использует физическую структуру каталогов. По умолчанию, bash следует по

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

--

Если после этой опции нет аргументов, сбрасываются значения позиционных параметров.

В противном случае, позиционные параметры устанавливаются в соответствии с

аргументами, даже если некоторые из них начинаются с дефиса (-).

-

Сигнализирует об окончании опций, так что все оставшиеся аргументы присваиваются

позиционным параметрам. Опции -x и -v при этом отключаются. Если больше

аргументов нет, позиционные параметры остаются без изменений.

Опции по умолчанию отключены, если явно не сказано иначе. При указании + вместо -

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

вызове командного интерпретатора. Текущий набор опций представлен в виде значения

параметра $-. Статус выхода - 0, если только не указана недопустимая опция.

shift [n]

Позиционные параметры n+1 ... переименовываются в $1 .... Параметры от $#-n+1 до

$# сбрасываются. n должно быть неотрицательным целым числом, не превышающим $#.

Если n равно 0, параметры не изменяются. Если n не указано, предполагается

значение 1. Если n больше $#, поизиционные параметры не изменяются. Статус выхода -

больше нуля, если n больше $# или отрицательное и 0 в противном случае.

shopt [-pqsu] [-o] [имя_опции ...]

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

интерпретатора. Если опции не указаны или задана опция -p, выдается список всех

возможных опций, с указанием, установлена опция или нет. Опция -p вызывает

выдачу результатов в формате, позволяющем использовать их в качестве входных команд.

Остальные опции имеют следующие значения:

-s

Включает (устанавливает) все указанные опции.

-u

Отключает (сбрасывает) все указанные опции.

-q

Подавляет выдачу стандартной информации (немногословный режим); статус выхода

показывает, установлена опция или нет. Если после -q указано несколько имен_опций,

статус выхода - 0, если все указанные опции включены и не 0 в противном случае.

-o

Ограничивает значения имен_опций только поддерживаемыми в

опции -o встроенной команды set.

Если опция -s или -u использована без аргументов, выдается информация только об

установленных или неустановленных опциях, соответственно. Если не указано иначе, опции

команды shopt по умолчанию отключены (сброшены).

Статус выхода при выдаче опций - 0, если все указанные опции включены и не 0 в

противном случае. При установке или сбросе опций статус выхода - 0, если только не

указана недопустимая опция командного интерпретатора.

Вот список допустимых опций команды shopt:

cdable_vars

Если эта опция установлена и переданный встроенной команде cd

аргумент не является именем каталога, то предполагается, что это - имя переменной,

значение которой - каталог для перехода.

cdspell

Если эта опция установлена, небольшие ошибки в написании имен каталогов для

команды cd будут исправляться. Речь идет о переставленных местами символах,

пропущенном символе и одном лишнем символе. Если при исправлении найден подходящий

вариант, выдается исправленное имя каталога и команда выполняется. Эта опция

используется только интерактивными командными интерпретаторами.

checkhash

Если эта опция установлена, bash проверяет, что найденная в хэше команда

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

существует, выполняется обычный поиск по каталогам.

checkwinsize

Если эта опция установлена, bash проверяет размер окна после выполнения каждой

команды и, при необходимости, обновляет значения переменных LINES и COLUMNS.

cmdhist

Если эта опция установлена, bash пытается сохранить все строки многострочной

команды в одной записи списка истории. Это позволяет легко редактировать многострочные

команды.

dotglob

Если эта опция установлена, bash включает в результаты подстановки имен файлов

имена, начинающиеся с точки (.).

execfail

Если эта опция установлена, не интерактивный командный интерпретатор не будет

завершать работу, если не сможет выполнить файл, указанный в качестве аргумента для

встроенной команды exec.

Интерактивный командный интерпретатор не завершает работу,

если команда exec не срабатывает.

expand_aliases

Если эта опция установлена, псевдонимы заменяются так, как было описано ранее в

разделе "ПСЕВДОНИМЫ". Эта опция включена по умолчанию

в интерактивных командных интерпретаторах.

extglob

Если эта опция установлена, поддерживаются расширенные возможности сопоставления с образцом, описанные ранее в разделе

"Подстановка имен файлов".

histappend

Если эта опция установлена, список истории добавляется в файл, имя которого является

значением пременной HISTFILE, при завершении работы командного интерпретатора, а не

переписывает файл.

histreedit

Если эта опция установлена и используется библиотека readline, пользователь получает

возможность повторно редактировать команду при невозможности подстановки из списка

истории.

histverify

Если эта опция установлена и используется библиотека readline, результаты подстановки

из списка истории не передаются анализатору командного интерпретатора немедленно.

Вместо этого, полученная в результате строка загружается в буфер редактирования

readline для дальнейших изменений.

hostcomplete

Если эта опция установлена и используется библиотека readline, bash будет пытаться

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

подраздел "Завершение" в разделе

"БИБЛИОТЕКА READLINE" ранее).

Эта опция включена по умолчанию.

huponexit

Если эта опция установлена, bash будет посылать сигнал SIGHUP всем заданиям

при завершении работы интерактивного начального командного интерпретатора.

interactive_comments

Если эта опция установлена, слово, начинающееся символом #, и все остальные символы в

этой строке игнорируются интерактивным команжным интерпретатором (см. раздел

"КОММЕНТАРИИ" ранее). Эта опция включена по умолчанию.

lithist

Если эта опция установлена, и установлена опция cmdhist,

многострочные команды, по возможности, сохраняются в списке истории со встроенными

символами новой строки вместо точек с запятыми.

mailwarn

Если эта опция установлена и файл, проверяемый командным интерпретатором bash как

почтовый ящик, читался с момента последней проверки, выдается сообщение

"The mail in имя_файла has been read".

nocaseglob

Если эта опция установлена, bash при подстановке имен файлов выполняет сопоставление

с образцом без учета регистра символов (см. раздел

"Подстановка имен файлов" ранее).

nullglob

Если эта опция установлена, bash подставляет пустую строку вместо шаблонов, которым

не соответствует ни один файл (см. раздел

"Подстановка имен файлов" ранее), а не

сам шаблон.

promptvars

Если эта опция установлена, в строках приглашения выполняется подстановка значений

переменных и параметров после стандартных подстановок, описанных в разделе

"ПРИГЛАШЕНИЯ" ранее. Эта опция установлена по умолчанию.

restricted_shell

Командный интерпретатор устанавливает эту опцию, если он запущен в ограниченном

режиме (см. раздел "

ОГРАНИЧЕННЫЙ КОМАНДНЫЙ ИНТЕРПРЕТАТОР" ниже). Значение этой

опции изменять нельзя. Она не сбрасывается при выполнении файлов начального запуска,

что позволяет в этих файлах учесть, является ли командный интерпретатор ограниченным.

shift_verbose

Если эта опция установлена, встроенная команда shift выдает сообщение об

ошибке, когда параметр сдвига превышает количество позиционных параметров.

sourcepath

Если эта опция установлена, встроенная команда source

(.) использует значение переменной PATH для поиска каталога, содержащего файл,

переданный в качестве аргумента. Эта опция по умолчанию включена.

suspend [-f]

Приостанавливает работу текущего командного интерпретатора, пока он не получит

сигнал SIGCONT. Опция -f отключает предупреждения, если эта команда выполняется в

начальном командном интерпретаторе - безусловно приостановить работу. Статус выхода -

0, если только командный интерпретатор не является начальным, а опция -f - не указана,

или если управление заданиями отключено.

test выражение

[ выражение ]

Возвращает статус 0 или 1, в зависимости от результатов проверки условного выражения.

Каждый оператор или операнд должен быть отдельным аргументом. Выражения состоят из

элементов, описанных ранее в разделе "УСЛОВНЫЕ ВЫРАЖЕНИЯ".

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

убыванию приоритета.

! выражение

Истинно, если выражение ложно.

( выражение )

Возвращает значение выражения. Можно использовать для переопределения обычного

приоритета выполнения операторов.

выражение1 -a выражение2

Истинно, если истинны оба выражения.

выражение1 -o выражение2

Истинно, если истинно выражение1 или выражение2.

Команды test и [ проверяют условные выражения с помощью набора правил, основанного

на количестве аргументов.

0 аргументов

Выражение ложно.

1 аргумент

Выражение истинно только если аргумент - не пустой.

2 аргумента

Если первый аргумент - !, выражение истинно только если второй аргумент -

пустой. Если первый аргумент - один из унарных условных операторов, перечисленных ранее

в разделе "УСЛОВНЫЕ ВЫРАЖЕНИЯ", выражение истинно,

если унарный оператор возвращает истину. Если первый аргумент не является

допустимым унарным условным оператором, выражение ложно.

3 аргумента

Если второй аргумент - один из бинарных условных операторов, перечисленных

ранее в разделе "УСЛОВНЫЕ ВЫРАЖЕНИЯ",

результатом проверки будет значение бинарного

условного выражения, использующего первый и третий аргументы в качестве операндов. Если

первый аргумент - !, результат - отрицание двухаргументной проверки второго и третьего

аргументов. Если первый аргумент - только (, а третий - только ),

результатом будет результат одноаргументной проверки второго аргумента. В противном случае,

выражение ложно. В этом контексте операторы -a и -o считаются бинарными.

4 аргумента

Если первый аргумент - !, результат - отрицание трехаргументной проверки оставшихся

аргументов. В противном случае, выражение разбирается и проверяется в соответствии

с приоритетами по перечисленным выше правилам.

5 и более аргументов

Выражение разбирается и проверяется в соответствии с приоритетами по перечисленным выше правилам.

times

Выдает накопленные пользовательское и системное время работы для командного

интерпретатора и запущенных из него процессов. Статус выхода - 0.

trap [-lp] [аргумент] [сигнал ...]

Команда аргумент читается и выполняется при получении командным интерпретатором

указанных сигналов. Если аргумент не указан или задан как -, для всех указанных

сигналов устанавливаются исходные обработчики (те, что были при запуске

командного интерпретатора). Если аргумент - пустая строка, все указанные сигналы

игнорируются командным интерпретатором и вызываемыми им командами. Если указана

опция -p, выдаются команды trap, связанные с каждым из перечисленных сигналов.

Если аргументов нет или указана только опция -p, команда trap выдает список

команд (обработчиков), связанных с каждым из сигналов.

Сигнал можно задавать как по имени,

определенному в файле <signal.h>, так и по номеру. Если в качестве сигнала

указана конструкция EXIT (0), команда-аргумент выполняется при завершении работы

командного интерпретатора. Если в качестве сигнала указано DEBUG,

команда-аргумент выполняется после каждой простой команды

(см. раздел "СИНТАКСИС КОМАНД" ранее).

Опция -l приводит к выдаче списка имен сигналов и соответствующих им номеров.

Сигналы, игнорировавшиеся при входе в командный интерпретатор, нельзя перехватить или

переустановить. Перехваченные сигналы сбрасываются в исходные значения в порожденных

процессах при создании. Статус возврата - 1, если указан недопустимый сигнал; в

противном случае, trap возвращает 0.

type [-atp] имя [имя ...]

При вызове без опций показывает, как имена будут интерпретироваться

при использовании в качестве имени команды. Если указана опция -t, type выдает

одну из строк alias, keyword, function, builtin или file,

если имя, соответственно,

представляет собой псевдоним, зарезервированное слово командного интерпретатора,

функцию, встроенную команду или файл на диске. Если имя не найдено, ничего не

выдается и возвращается статус выхода 1. Если указана опция -p, type вернет

либо имя файла на диске, который будет выполняться при указании имени в качестве

имени команды, либо ничего, если обращения к файлу не будет. Если команда хранится в

хэше, опция -p приводит к выдаче значения из хэша, а не обязательно первого файла,

выбираемого по перечисленным в PATH каталогам. Если использована опция -a, команда

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

хэшу команд не обращаются, если указана опция -a. Команда type возвращает 0,

если хоть один из аргументов найден, и 1 в противном случае.

ulimit [-SHacdflmnpstuv [ограничение]]

Обеспечивает управление ресурсами, доступными для командного интерпретатора и

запущенных им процессов в системах, поддерживающих такое управление. Значение

ограничения может быть числом единиц измерения ресурса или строкой unlimited.

Опции -H и -S указывают, что для данного ресурса устанавливается жесткое или мягкое

ограничение. Жесткое ограничение после установки превосходить нельзя; мягкое

ограничение можно превосходить вплоть до значения соответствующего жесткого

ограничения. Если опции -H и -S не указаны, устанавливаются и мягкое, и жесткое

ограничение. Если ограничение не указано, выдается текущее значение мягкого ограничения

на ресурс, если только не указана опция -H. Если указано несколько ресурсов,

перед значением выдается название и единица измерения ресурса. Другие опции

интерпретируются следующим образом:

-a

Выдается информация о всех текущих ограничениях

-c

Максимальный размер создаваемых файлов core

-d

Максимальный размер сегмента данных процесса

-f

Максимальный размер файлов, создаваемых командным интерпретатором

-l

Максимальный размер сегмента, который может быть привязан к памяти

-m

Максимальный размер резидентного набора

-n

Максимальное количество открытых файловых дескрипторов (большинство систем не

позволяет устанавливать это значение)

-p

Размер программного канала в 512-байтовых блоках (его устанавливать нельзя)

-s

Максимальный размер стека

-t

Максимальное количество процессорного времени в секундах

-u

Максимальное количество процессов для одного пользователя

-v

Максимальный объем виртуальной памяти, доступный командному интерпретатору

Если ограничение указано, оно становится новым предельным значением для

соответствующего ресурса (опция -a только выдает информацию). Если опции не

заданы, предполагается опция -f. Значения представляются в единицах 1024 байта, за

исключением опции -t, где значения - в секундах, -p, где значения - в 512-байтовых

блоках, и опций -n и -u, для которых значения не масштабируются. Статус выхода - 0,

если не указана недопустимая опция, в качестве ограничения не задано не числовое значение, отличное от unlimited, и при установке нового ограничения не произошла ошибка.

umask [-p] [-S] [маска]

Пользовательская маска создания файла устанавливается равной аргументу маска. Если

маска начинается с цифры, она интерпретируется как восьмеричное число; иначе - как

маска в символьном формате, аналогичном используемому в команде chmod(1). Если

маска не указана или задана опция -S, выдается текущее значение маски. Опция -S

вызывает выдачу маски в символьном формате; по умолчанию выдается восьмеричное

число. Если указана опция -p, а маска не задана, результат выдается в виде,

который можно использовать во входной команде. Статус выхода - 0, если маска была

успешно изменена или не указана, и 1 в противном случае.

unalias [-a] [имя ...]

Удаляет имена из списка определенных псевдонимов. Если указана опция -a, удаляются

все определения. Возвращается значение 0, за исключением случаев, когда переданное

имя не является псевдонимом.

unset [-fv] [имя ...]

Для каждого имени удаляет (сбрасывает) соответствующую переменную или функцию.

Если опции не указаны или задана опция -v, удаляются только переменные.

Переменные только для чтения удалять нельзя. Если указана опция -f,

удаляются только определения соответствующих функций. Удаляемая переменная

или функция удаляется из среды, передаваемой последующим командам. Если

сбрасывается одна из переменных RANDOM, SECONDS, LINENO,

HISTCMD или DIRSTACK,

эти переменные теряют специальные свойства, даже если они в дальнейшем

снова устанавливаются. Статус выхода - 0, за исключеним случаев, когда имя не

существует или доступно только для чтения.

wait [n]

Ждет завершения указанного процесса и возвращает статус его завершения. n может

быть идентификатором процесса или спецификацией задания; если указана спецификация

задания, ждет завершения всех процессов в конвейере соответствующего задания. Если

n не указано, ожидается завершение всех текущих активных порожденных процессов, и

возвращается статус ноль. Если n задает идентификатор несуществующего процесса или

задания, статус выхода - 127. В противном случае, статусом выхода является

статус завершения последнего процесса или задания, завершение которого ждали.

## ОГРАНИЧЕННЫЙ КОМАНДНЫЙ ИНТЕРПРЕТАТОР
Если bash запущен по имени rbash или с опцией -r при вызове,

командный интерпретатор становится ограниченным. Ограниченный командный

интерпретатор используется для создания более управляемой стреды по сравнению с

обычным интерпретатором. Он ведет себя аналогично bash, но следующие действия

не разрешены или не выполняются:

- изменение текущего каталога с помощью cd

- установка или сброс значений переменных SHELL, PATH, ENV или BASH_ENV

- указание / в именах команд

- указание имени файла, содержащего /, в качестве аргумента для встроенной команды .

- импортирование определений функций из среды командного интерпретатора при запуске

- разбор значения переменной SHELLOPTS из среды командного интерпретатора при запуске

- перенаправление вывода с помощью операторов >, >|, <>, >&, &> и >>

- использование встроенной команды exec для замены командного интерпретатора другой командой

- добавление или удаление встроенных команд с помощью опций -f и -d встроенной команды enable

- указание опции -p для встроенной команды command

- отключение режима ограниченного командного интерпретатора с помощью опций set +r или set +o restricted.

Эти ограничения применяются после чтения файлов начального запуска.

При выполнении команды, которая оказалась сценарием командного интерпретатора

(см. раздел "ВЫПОЛНЕНИЕ КОМАНД" ранее),

rbash отключает любые ограничения в

командном интерпретаторе, порожденном для выполнения сценария.

## ССЫЛКИ
Bash Features, Brian Fox and Chet Ramey

The Gnu Readline Library, Brian Fox and Chet Ramey

The Gnu History Library, Brian Fox and Chet Ramey

Utilities, IEEE Portable Operating System Interface (POSIX) Part 2: Shell

и

sh(1),

ksh(1),

csh(1),

vi(1)

## ФАЙЛЫ
/bin/bash

Выполняемый файл bash

/etc/profile

Общесистемный файл инициализации, выполняется начальными командными интерпретаторами

~/.bash_profile

Личный файл инициализации, выполняется начальными командными интерпретаторами

~/.bashrc

Отдельный файл начального запуска для интерактивных командных интерпретаторов

~/.bash_logout

Отдельный файл очистки для начального командного интерпретатора, выполняемый при

завершении его работы

~/.inputrc

Отдельный файл инициализации библиотеки readline

## АВТОРЫ
Брайан Фокс (Brian Fox), Free Software Foundation

<bfox@gnu.ai.MIT.Edu>

Чет Реми (Chet Ramey), Case Western Reserve University

<chet@ins.CWRU.Edu>

## ИНФОРМАЦИЯ ОБ ОШИБКАХ
Если вы обнаружили ошибку в bash, сообщите о ней. Но сначала убедитесь, что

это действительно ошибка, и что она проявляется в последней имеющейся у вас версии

bash.

После того, как определено, что ошибка действительно существует, используйте команду bashbug для посылки сообщения об ошибке. Если вы знаете, как ошибку исправить,пришлите и исправление! Предложения и "философские" сообщения об ошибках

можете отправлять по электронной почте по адресу

<bug-bash@gnu.org> или в дискуссионную

группу Usenet gnu.bash.bug.

ВСЕ сообщения об ошибках должны включать:

- номер версии bash

- информацию об аппаратной платформе и операционной системе

- компилятор, использовавшийся для компиляции

- описание ошибочного поведения

- короткий сценарий или "рецепт", позволяющий воспроизвести проблему

Команда bashbug вставляет первые три компонента в предлагаемый шаблон сообщения

об ошибке автоматически.

Комментарии и сообщения об ошибках на этой странице справочного руководства

отправляйте по адресу <chet@ins.CWRU.Edu>.

Комментарии и сообщения об ошибках в переводе этой страницы справочного руководства

на русский язык отправляйте по адресу <valera@openxs.kiev.ua>.

## ОШИБКИ
Слишком большой и слишком медленный.

Есть ряд небольших отличий между bash и традационными версиями sh, в основном,

связанные с поддержкой спецификации POSIX.

Псевдонимы иногда могут сбивать с толку.

Встроенные команды и функции интерпретатора нельзя остановить/перезапустить.

Составные команды и последовательности команд вида 'a ; b ; c' обрабатываются

некорректно при попытке приостановки процесса. Когда процесс останавливается,

командный интерпретатор немедленно выполняет следующую команду в последовательности.

Для выполнения последовательности команд в порожденном командном интерпретаторе, что

позволяет останавливать их, как единое целое, достаточно взять ее в скобки.

Команды в операторе подстановки результатов выполнения команды $(...) не

разбираются, пока не будет выполнена попытка подстановки. Это откладывает

выдачу сообщения об ошибке на определенное время при вводе команды.

Нельзя (пока) экспортировать массивы.

## ПРИМЕЧАНИЯ
Исходный код bash доступен в пакете SUNWbashS.