BASH
ИМЯОБЗОР
COPYRIGHT
ОПИСАНИЕ
ОПЦИИ
АРГУМЕНТЫ
ЗАПУСК
ОПРЕДЕЛЕНИЯ
ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА
СИНТАКСИС КОМАНД
КОММЕНТАРИИ
ЭКРАНИРОВАНИЕ
ПАРАМЕТРЫ
ПРЕОБРАЗОВАНИЯ
ПЕРЕНАПРАВЛЕНИЕ
ПСЕВДОНИМЫ
ФУНКЦИИ
АРИФМЕТИЧЕСКИЕ ВЫРАЖЕНИЯ
УСЛОВНЫЕ ВЫРАЖЕНИЯ
ОБРАБОТКА ПРОСТОЙ КОМАНДЫ
ВЫПОЛНЕНИЕ КОМАНДЫ
СРЕДА ВЫПОЛНЕНИЯ КОМАНД
ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ
СТАТУС ВЫХОДА
СИГНАЛЫ
УПРАВЛЕНИЕ ЗАДАНИЯМИ
ПРИГЛАШЕНИЕ КОМАНДНОЙ СТРОКИ
READLINE
ИСТОРИЯ ВЫПОЛНЕНИЯ КОМАНД
ПОДСТАНОВКА КОМАНД ИЗ СПИСКА ИСТОРИИ
ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА
ОГРАНИЧЕННЫЙ КОМАНДНЫЙ ИНТЕРПРЕТАТОР
СМОТРИ ТАКЖЕ
ФАЙЛЫ
АВТОРЫ
ИНФОРМАЦИЯ ОБ ОШИБКАХ
ОСОБЕННОСТИ
ИМЯ
bash - командный интерпретатор GNU Bourne-Again SHell |
ОБЗОР
bash [options] [file] |
COPYRIGHT
Bash is Copyright 1989-2001 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 Список всех строк в двойных кавычках с префиксом $ выдается в стандартный выходной поток. Это строки, которые необходимо перевести на соответствующий язык, если текущая категория локализации (locale) отличается от C или POSIX. При этом неявно предполагается опция -n; никакие команды выполняться не будут. |
-- Пара дефисов (--) обозначает конец опций и отключает их дальнейшую обработку. Любые аргументы после -- рассматриваются как имена файлов и аргументы. Аргумент - эквивалентен --. |
bash также интерпретирует несколько многосимвольных опций. Эти опции, чтобы они были распознаны, должны указываться в командной строке перед односимвольными опции. |
--dump-po-strings |
Аналогична опции -D, но результат выдается в формате файла GNU gettext po (portable object - переносимый объект). |
--dump-strings |
Аналогична опции -D. |
--help |
Выдает в стандартный выходной поток сообщение об использовании и успешно завершает работу. |
--init-file файл |
--rcfile файл |
Выполняет команды из указанного файла вместо стандартного персонального файла инициализации ~/.bashrc, если командный интерпретатор работает интерактивно (см. "ЗАПУСК" ниже). |
--login |
Заставляет bash работать так, как если бы он был вызван в качестве начального командного интерпретатора (см. "ЗАПУСК" ниже). |
--noediting |
Не использует библиотеку GNU readline для чтения командных строк в интерактивном режиме. |
--noprofile |
Не читает ни общесистемный файл начального запуска /etc/profile, ни любой из персональных файлов инициализации пользователя ~/.bash_profile, ~/.bash_login или ~/.profile. По умолчанию, bash читает эти файлы при вызове в качестве начального командного интерпретатора (см. "ЗАПУСК" ниже). |
--norc |
Не читает и не выполняет персональный файл инициализации ~/.bashrc, если командный интерпретатор работает интерактивно. Эта опция по умолчанию включена, если интерпретатор вызван как sh. |
--posix |
Изменяет поведение bash в тех случаях, когда оно отличается от предполагаемого стандартом POSIX 1003.2, на стандартное (режим posix). |
--restricted |
Командный интерпретатор становится ограниченным (см. "ОГРАНИЧЕННЫЙ КОМАНДНЫЙ ИНТЕРПРЕТАТОР" ниже). |
--rpm-requires |
Выводит список файлов, необходимых для запуска сценария. Это подразумевает опцию -n и подпадает под те же ограничения, что и проверка ошибок при компиляции. Backticks, условные выражения [] и команды eval не анализируются, так что некоторые зависимости могут оказаться неучтенными. |
--verbose |
Аналогична опции -v. |
--version |
Выдает информацию о версии данного экземпляра bash в стандартный выходной поток и успешно завершает работу. |
АРГУМЕНТЫ
Если после обработки опций остались аргументы и не указаны опции -c или -s, первый аргумент считается именем файла, содержащего команды интерпретатора. Если bash вызван таким образом, параметр $0 устанавливается равным имени файла, а значениями позиционных параметров становятся другие аргументы. bash читает и выполняет команды из этого файла, а затем завершает работу. Статусом выхода bash является статус выхода последней команды, выполненной в сценарии. Если ни одна команда не выполнена, статус выхода - 0. |
ЗАПУСК
Начальный командный интерпретатор (login shell) - это интерпретатор, первый символ нулевого аргумента которого является дефисом (-) или который запущен с опцией --login |
Интерактивным является командный интерпретатор, запущенный без аргументов-файлов и опции -c, стандартный входной и выходной потоки которого подключены к терминалам (что определяется с помощью функции 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]] [ ! ] команда1 [ | команда2 ... ] |
Стандартный выходной поток команды1 связывается со стандартным входным потоком команды2. Эта связь выполняется раньше, чем любые перенаправления, задаваемые командой (см. "ПЕРЕНАПРАВЛЕНИЕ" ниже). |
Если перед конвейером указано зарезервированное слово !, статус выхода такого конвейера является логическим отрицанием статуса выхода последней команды. В противном случае, статус выхода конвейера совпадает со статусом выхода последней команды. Прежде, чем возвращать значение, командный интерпретатор ждет завершения всех команд в конвейере. |
Если перед конвейером идет зарезервированное слово time, после завершения конвейера выдается общее, пользовательское и системное время, потраченное на его выполнение. Опция -p изменяет формат вывода на задаваемый стандартом POSIX. Переменная TIMEFORMAT может задавать строку формата выдачи информации о времени; см. описание переменной TIMEFORMAT в разделе "Переменные командного интерпретатора" ниже. |
Каждая команда в конвейере выполняется как отдельный процесс (т.е. в порожденном интерпретаторе). |
Списки |
Список - это последовательность одного или более конвейеров, разделенных одним из операторов ;, &, && или ||, и не обязательно завершающаяся одним из операторов ;, & или <перевод_строки>. |
Из этих операторов списка && и || имеют равный приоритет, причем больший, чем ; и &, тоже имеющие равный приоритет. |
Если команда завершается управляющим оператором &, интерпретатор выполняет команду в фоновом режиме в порожденном интерпретаторе. Командный интерпретатор не ждет завершения команды, а статус выхода в этом случае - 0. Команды, разделенные ; выполняются последовательно; командный интерпретатор ждет поочередно завершения каждой из команд. Статус возврата списка в этом случае совпадает со статусом возврата последней выполненной команды. |
Управляющие операторы && и || обозначают, соответственно, И-списки и ИЛИ-списки. И-список имеет вид |
команда1 && команда2 |
Команда2 выполняется в том и только в том случае, если команда1 вернула статус выхода ноль. |
ИЛИ-список имеет вид |
команда1 || команда2 |
Команда2 выполняется в том и только в том случае, если команда1 вернула ненулевой статус выхода. И- и ИЛИ-списки возвращают статус последней команды, выполненной в списке. |
Составные команды |
Составными называют следующие команды: |
(список) |
Список выполняется в порожденном командном интерпретаторе. Присваивания переменным и встроенные команды, влияющие на среду командного интерпретатора, не действуют после завершения команды. Статусом возврата является статус выхода списка. |
{ список; } |
Список просто выполняется в среде текущего командного интерпретатора. Список должен завершаться переводом строки или точкой с запятой. Эту команду называют командой группировки. Статусом возврата является статус выхода списка. |
((выражение)) |
Выражение вычисляется в соответствии с правилами, описанными ниже в разделе "АРИФМЕТИЧЕСКИЕ ВЫРАЖЕНИЯ". Если выражение имеет ненулевое значение, статус возврата равен 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. |
for (( выражение1 ; выражение2 ; выражение3 )) ; do список ; done |
Сначала вычисляется выражение1 по правилам, указанным ниже в разделе "АРИФМЕТИЧЕСКИЕ ВЫРАЖЕНИЯ". Затем циклически вычисляется выражение2 до тех пор, пока не станет равным нулю. После очередного вычисления выражения2 выполняется список и вычисляется выражение3. Если какое-либо из выражений пропущено, командный интерпретатор считает его значение единицей. Сатусом возврата является статус выхода последней выполненной команды в списке или 1, если какое-либо из выражений некорректно. |
select имя [ in список_слов ] ; do список ; done |
Выполняются преобразования в списке_слов после in, в результате чего получается список эелементов. Набор слов, полученных после преобразований, выдается в стандартный поток ошибок, причем перед каждым элементом выдается его порядковый номер. Если слово in не указано, выдаются заданные аргументы командной строки (см. раздел "ПАРАМЕТРЫ" ниже). Затем выдается приглашение PS3 и читается строка со стандартного входного потока. Если эта строка содержит число, соответствующее одному из выданных слов, то переменная имя получает его значение. Если строка пустая, список_слов и приглашение выдаются снова. Если прочитан символ конца файла (EOF), команда заврешается. При вводе любого другого значения переменная имя получает пустое значение. Прочитанная строка сохраняется в переменной REPLY. Список выполняется после каждого выбора, пока не будет выполнена команда break или return. Статусом выхода команды select является статус выхода последней выполненной команды в списке, или 0, если ни одна команда не была выполнена. |
case слово in [ [(] шаблон1 [ | шаблон2 ] ... ) список ;; ] ... esac |
Команда case сначала преобразует значение слова и пытается его сопоставить поочередно с каждым шаблоном, используя те же правила сопоставления, что и для имен файлов (см. секцию "Подстановка имен файлов"). Если найден подходящий шаблон, выполняется соответствующий список. После нахождения подходящего шаблона дальнейшее сопоставление не выполняется и команда завершается. Статус выхода равен 0, если ни один шаблон не подошел. В противном случае, он равен статусу выхода последней выполненной команды из соответствующего списка. |
if список; then список; [ elif список; then список; ] ... [ else список; ] fi |
Выполняется список после if. Если его статус выхода - 0, выполняется список после then. В противном случае, выполняется последовательно список в очередной конструкции elif, и если его статус выхода - 0, выполняется соответствующий список после then и команда завершается. Если все конструкции elif проверены и ни один из списков не вернул статус 0, выполняется список после else, если эта конструкция задана. Статусом выхода является статус выхода последней выполненной команды или 0, если ни одно из условий не оказалось истинным. |
while список1; do список2; done |
until список1; do список2; done |
Команда while циклически выполняет список2 после do, пока последняя команда списка1 возвращает статус выхода 0. Команда until идентична команде while, но условие завершения - противоположно: список2 после do выполняется, пока последняя команда списка1 возвращает ненулевой статус выхода. Статусом выхода команд while и until является статус выхода последней выполненной команды списка2 или 0, если ни одна команда не выполнена. |
[ function ] имя () { список; } |
Эта команда определяет функцию с указанным именем. Тело функции образует список команд между фигурными скобками { и }. Этот список выполняется каждый раз, когда имя функции указывается как имя простой команды. Статусом выхода функции является статус выхода последней команды, выполненной в теле функции. (См. раздел "ФУНКЦИИ" ниже.) |
КОММЕНТАРИИ
В неинтерактивном командном интерпретаторе или в интерактивном с включенной опцией interactive_comments встроенной команды shopt (см. раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже), слово, начинающиеся символом #, влечет игнорирование этого слова и последующих символов в строке. Интерактивный командный интерпретатор с выключенной опцией interactive_comments не допускает использования комментариев. Опция interactive_comments по умолчанию включена в интерактивных командных интерпретаторах. |
ЭКРАНИРОВАНИЕ
Экранирование (quoting) используется для отмены специального значения для командного интерпретатора определенных символов или слов. Экранирование можно использовать для отмены специфической обработки специальных символов, для предотвращения распознавания зарезервированных слов, а также для предотвращения преобразования параметров. |
Каждый из метасимволов, перечисленных выше в разделе "ОПРЕДЕЛЕНИЯ", имеет специальное значение для командного интерпретатора и должен экранироваться, если используется буквально. |
Если разрешены возможности подстановок истории команд, символ ! также подлежит экранированию, если используется буквально. |
Имеется три механизма экранирования: символ экранирования (escape character), одиночные кавычки и двойные кавычки. |
Неэкранированная обратная косая черта "обратный слеш" (\) является символом экранирования. Следующий за ним символ (за исключением перевода строки) будет использован буквально. Если введена пара символов \<перевод_строки> и сам обратный слеш не экранирован, эта пара обрабатывается как признак продолжения строки (т.е. она удаляется из входного потока и, по сути, игнорируется). |
Все символы в одиночных кавычках используются буквально. Символ одиночной кавычки (апостроф) не должен указываться между одиночными кавычками, даже если он предваряется обратным слешем. |
Символы в двойных кавычках используются буквально, за исключением символов $, ` и \. Символы $ и ` в двойных кавычках сохраняют свое специальное значение. Обратный слеш сохраняет специальное значение, только если после него идет один из следующих символов: $, `, ", \ или <перевод_строки>. Двойную кавычку можно указать внутри такого выражения, экранировав ее обратным слешем. |
Специальные параметры * и @ внутри двойных кавычек интерпретируются по-разному (см. раздел "ПАРАМЕТРЫ" ниже). |
Выражения вида $'строка' обрабатываются особым образом. Выражение заменяется строкой, в которой предваренные обратным слешем символы заменяются в соответствии со стандартом ANSI C. Управляющие последовательности, начинающиеся с обратного слеша, декодируются следующим образом: |
a |
сигнал (звонок) |
b |
забой |
e |
управляющий символ |
f |
прогон страницы |
n |
перевод строки |
r |
возврат каретки |
t |
горизонтальная табуляция |
v |
вертикальная табуляция |
\ |
обратный слеш |
' |
апостроф |
\nnn |
символ с кодом ASCII nnn в восьмеричном виде (от одной до трех цифр) |
xnnn |
символ с кодом ASCII nnn в шестнадцатеричном виде (от одной до трех цифр) |
Преобразованный результат помещается в одиночные кавычки, как если бы символа доллара просто не было. |
Строка в двойных кавычках, перед которой идет символ доллара ($), будет преобразована в соответствии с текущей категорией локализации (locale). Если текущая категория локализации - C или POSIX, символ доллара игнориурется. Если строка преобразована и заменена, результат помещается в двойные кавычки. |
ПАРАМЕТРЫ
Параметр (переменная) - это сущность, хранящая значение. Эта сущность может определяться именем, числом или одним из специальных символов, перечисленных ниже в секции "Специальные переменные". В контексте интерпретатора, переменная - это параметр, обозначаемый именем. |
Параметр устанавливается, если ему присвоено значение. Пустая строка является допустимым значением. После того, как переменная установлена, она может быть удалена только с помощью встроенной команды unset (см. раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже). |
Значение переменной может быть присвоено с помощью оператора вида |
имя=[значение] |
Если значение не задано, переменной присваивается пустая строка. Во всех значениях выполняется преобразование тильды, преобразование параметров, подстановка результатов выполнения команд, арифметические подстановки и удаление символов экранирования (см. раздел "ПРЕОБРАЗОВАНИЯ" ниже). Если для переменной установлен атрибут целочисленная (integer) (см. команду declare раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже), ее значение преобразуется по правилам для арифметических выражений, даже если явно не использована арифметическая подстановка $((...)) (см. секцию "Арифметическая подстановка" ниже). Разбиение на слова не выполняется, за исключением значения "$@", как объяснено ниже в секции "Специальные переменные". Подстановка имен файлов не выполняется. |
Аргументы командной строки |
Аргумент командной строки (позиционный параметр) - это параметр, обозначаемый одной или несколькими цифрами, кроме цифры 0. Аргументам командной строки значения присваиваются на основе параметров, переданных при вызове командного интерпретатора. Эти значения могут быть изменены с помощью встроенной команды set. Аргументам командной строки нельзя присваивать значения с помощью операторов присваивания. Позиционные параметры временно заменяются при выполнении функции командного интерпретатора (см. раздел "ФУНКЦИИ" ниже). |
Если аргумент командной строки обозначается несколькими цифрами, их следует заключить в скобки, как описано в разделе "ПРЕОБРАЗОВАНИЯ". |
Специальные переменные |
Командный интерпретатор обрабатывает ряд параметров специальным образом. Можно только ссылаться на значения этих параметров - присваивания им не разрешены. |
* |
Заменяется аргументами командной строки, начиная с первого. Когда такая замена выполняется в двойных кавычках, результат будет одним словом, в котором значения параметров разделены первым символом значения специальной переменной IFS. То есть, "$*" эквивалентно "$1c$2c...", где c - первый символ значения переменной IFS. Если переменная IFS не установлена, значения параметров разделяются пробелами. Если переменная IFS имеет пустое значение, значения параметров просто конкатенируются, без разделителей. |
@ |
Заменяется аргументами командной строки, начиная с первого. Когда такая замена выполняется в двойных кавычках, каждый параметр считается отдельным словом. То есть, "$@" эквивалентно "$1" "$2" ... Когда аргументов командной строки нет, "$@" и $@ заменяются пустой строкой (т.е. они просто удаляются). |
# |
Заменяется десятичным значением количества аргументов командной строки. |
? |
Заменяется статусом последнего выполненного в приоритетном режиме (foreground) конвейера. |
- |
Заменяется флагами текущих опций, заданных при вызове, с помощью встроенной команды set или установленных самим командным интерпретатором (как, например, опция -i). |
$ |
Заменяется идентфикатором процесса командного интерпретатора. В порожденном командном интерпретаторе, запущенном с помощью (), заменяется идентификатором процесса основного интерпретатора, а не порожденного. |
! |
Заменяется идентфикатором последнего процесса, запущенного в фоновом (асинхронном) режиме. |
0 |
Заменяется именем командного интерпретатора или сценария. Это значение устанавливается при инициализации командного интерпретатора. Если bash вызван с командным файлом, $0 будет присвоено имя этого файла. Если bash запущен с опцией -c, $0 получает значение первого аргумента после строки, которую надо выполнить, если он задан. В противном случае, этот специальный параметр получает значение имени файла, использованного для вызова bash, которое задается нулевым аргументом. |
_ |
При запуске командного интерпретатора устанавливается равным полному имени файла командного интерпретатора или выполняемого сценария, переданного в списке аргументов. В последствии, заменяется последним аргументом предыдущей команды, с учетом всех преобразований. Также устанавливается равным полному имени файла каждой выполняемой внешней команды и помещается в среду, экспортируемую для этой команды. При проверке почты, этот параметр содержит имя проверяемого файла почты. |
Переменные командного интерпретатора |
Командный интерпретатор устанавливает следующие переменные: |
PPID |
Идентификатор родительского процесса для командного интерпретатора. Эта переменная доступна только для чтения. |
PWD |
Текущий рабочий каталог, установленный с помощью команды cd. |
OLDPWD |
Предыдущий рабочий каталог, который был установлен с помощью команды cd. |
REPLY |
Устанавливается равной значению, прочитанному встроенной командой read, при вызове ее без аргументов. |
UID |
Идентификатор текущего пользователя - устанавливается при запуске командного интерпретатора. Эта переменная доступна только для чтения. |
EUID |
Эффективный идентификатор текущего пользователя - устанавливается при запуске командного интерпретатора. Эта переменная доступна только для чтения. |
GROUPS |
Переменная-массив, содержащая список групп, в которые входит текущий пользователь. Попытки изменения значения этой переменной игнорируются и возвращают ненулевой код выхода. Если переменная GROUPS удалена при помощи unset, она теряет свои специальные свойства, даже если ее снова определить. |
BASH |
Полное имя файла, использованное для вызова данного экземпляра bash. |
BASH_VERSION |
Строка, описывающая версию данного экземпляра bash. |
BASH_VERSINFO |
Доступный только для чтения массив, элементы которого содержат информацию о версии для данного экземпляра bash. Элементы массива имеют следующие значения: |
BASH_VERSINFO[0] |
Главный номер версии (релиз). |
BASH_VERSINFO[1] |
Второстепенный номер версии (версия). |
BASH_VERSINFO[2] |
Уровень исправлений (patch-level). |
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, она теряет свои специальные свойства, даже если ее снова определить. |
FUNCNAME |
Имя выполняемой в данный момент функции. Эта переменная существует только в момент выполнения той или иной функции. Попытки присвоить значение переменной FUNCNAME игнорируются и возвращают ненулевой статус выхода. Если переменная FUNCNAME удаляется с помощью unset, она теряет свои специальные свойства, даже если ее снова определить. |
DIRSTACK |
Переменная-массив (см. секцию "Массивы" далее), в которой хранится текущее содержимое стека каталогов. Каталоги находятся в стеке в том же порядке, в котором выдаются встроенной командой dirs. Путем присваивание элементам этого массива можно изменять каталоги, уже находящиеся в стеке, но для добавления и удаления каталогов надо использовать встроенные команды pushd и popd. Присваивание значения этой переменной не меняет текущий каталог. Если переменная DIRSTACK удаляется с помощью unset, она теряет свои специальные свойства, даже если ее снова определить. |
PIPESTATUS |
Переменная-массив (см. раздел "Массивы" далее), содержащая список значений статусов выхода процессов в последнем выполненном в приоритетном режиме (foreground) конвейере (который может состоять всего из одной команды). |
OPTARG |
Значение последнего аргумента-опции, обработанного встроенной командной getopts (см. раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже). |
OPTIND |
Индекс следующего аргумента, который должен быть обработан встроенной командой getopts (см. раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже). |
HOSTNAME |
Автоматически устанавливается равной имени текущего хоста. |
HOSTTYPE |
Автоматически устанавливается равной строке, уникально описывающей тип машины, на которой выполняется bash. Стандартное значение зависит от системы. |
OSTYPE |
Автоматически устанавливается равной строке, описывающей операционную систему, на которой выполняется командный интерпретатор bash. Стандартное значение зависит от системы. |
MACHTYPE |
Автоматически устанавливается равной строке, полностью описывающей тип системы, на которой выполняется bash, в стандартном для GNU формате процессор-компания-система. Стандартное значение зависит от системы. |
SHELLOPTS |
Список установленных опций командного интерпретатора через двоеточие. Каждое слово в списке - допустимый аргумент для опции -o встроенной команды set (см. раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже). Опции, упоминающиеся в списке SHELLOPTS, совпадают с выдаваемыми как установленные командой set -o. Если эта переменная экспортирована в среду при запуске bash, все упомянутые в списке опции будут установлены до чтения любых файлов начального запуска. Эта переменная доступна только для чтения. |
COMP_WORDS |
Переменная-массив (см. секцию "Массивы" далее), содержащая слова из текущей командной строки. Эта переменная доступна только внутри функций, вызываемых сервисом программируемого завершения строки (см. ниже "Программируемое завершение") |
COMP_CWORD |
Индекс в массиве COMP_WORDS, соответствующий слову в текущей позиции курсора. Эта переменная доступна только внутри функций, вызываемых сервисом программируемого завершения строки (см. ниже "Программируемое завершение") |
COMP_LINE |
Текущая командная строка. Эта переменная доступна только внутри функций, вызываемых сервисом программируемого завершения строки (см. ниже "Программируемое завершение") |
COMP_POINT |
Номер позиции курсора относительно начала текущей команды. Если курсор находится в конце текущей команды, это значение эквивалентно ${#COMP_LINE}. Эта переменная доступна только внутри функций, вызываемых сервисом программируемого завершения строки (см. ниже "Программируемое завершение") |
Следующие переменные используются командным интерпретатором. В некоторых случаях bash присваивает переменным стандартные значения; эти случаи указаны ниже. |
IFS |
Внутренний разделитель полей (Internal Field Separator), используемый для выделения слов после всех преобразований и для разбиения на слова строк, прочитанных с помощью встроенной команды read. Стандартное значение - "<пробел><табуляция><перевод строки>". |
PATH |
Путь поиска команд. Это список каталогов через двоеточие, в
которых командный интерпретатор ищет команды (см. раздел
"ВЫПОЛНЕНИЕ КОМАНД" ниже). Стандартный путь
поиска зависит от системы и задается администратором,
устанавливающим bash. Типичное значение: /usr/gnu/bin:/usr/local/bin:/bin:/usr/bin:. |
HOME |
Домашний каталог текущего пользователя; аргумент по умолчанию для встроенной команды cd. Значение этой переменной также используется при преобразовании тильды. |
CDPATH |
Путь поиска для команды cd. Это список каталогов через двоеточие, в которых командный интерпретатор ищет целевые каталоги, указанные по имени в команде cd. Пример возможного значения - ".:~:/usr". |
BASH_ENV |
Если этот параметр установлен при выполнении командным интерпретатором bash сценария, его значение интерпретируется как имя файла, содержащего команды инициализации интерпретатора, аналогично ~/.bashrc. В значении BASH_ENV перед интерпретацией выполняется преобразование параметров, подстановка результатов выполнения команд и арифметические подстановки. Переменная PATH не используется для поиска результирующего имени файла. |
Если этот параметр установлен равным имени файла и не установлена переменная MAILPATH, bash информирует пользователя о получении электронной почты в указанный файл. |
MAILCHECK |
Задает частоту проверки (в секундах) электронной почты командным интерпретатором bash. Стандартное значение - 60 секунд. Когда приходит время проверять наличие новой почты, bash делает это перед выдачей приглашения командной строки. Если эта переменная не установлена или имеет нечисленное неположительное значение, проверка почты командным интерпретатором отключается. |
MAILPATH |
Список имен файлов через двоеточие, в которых нужно проверять наличие новых почтовых сообщений. Можно задавать сообщение, которое должно выдаваться при поступлении почты в конкретный файл, отделяя сообщение от имени файла вопросительным знаком (?). В тексте этого сообщения метасимвол $_ заменяется именем текущего файла почты. Например: |
MAILPATH='/var/mail/bfox?"Лови мыло":~/shell-mail?"Мыльница $_ переполнена!"' |
bash поддерживает стандартное значение для этой переменной, но используемое при этом местонахождение файлов почты пользователя зависит от системы (например, /var/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. |
Необязательный параметр l задает длинный формат, включая минуты, в виде MMmSS.FFs. Значение праметра p определяет, включаются доли секунды или нет. |
Если эта переменная не установлена, bash действует так, как если бы она имела значение $'nrealt%3lRnusert%3lUnsys%3lS'. Если установлено пустое значение, информация о времени выполнения не выдается. При выводе строки по формату добавляется перевод строки. |
HISTSIZE |
Количество команд, которые необходимо запоминать в списке истории (см. раздел "ИСТОРИЯ ВЫПОЛНЕНИЯ КОМАНД" ниже). Стандартное значение - 500. |
HISTFILE |
Имя файла, в котором сохраняется история команд (см. раздел "ИСТОРИЯ ВЫПОЛНЕНИЯ КОМАНД" ниже). Стандартное значение - ~/.bash_history. Если эта переменная не установлена, история команд не сохраняется при завершении работы интерактивного командного интерпретатора. |
HISTFILESIZE |
Максимальное количество строк, содержащееся в файле истории. Если этой переменной присвоено значение, файл истории, при необходимости, усекается, и будет содержать не больше, чем указанное количество строк. Стандартное значение - 500. Файл истории также усекается до этого размера после записи при выходе из интерактивного командного интерпретатора. |
OPTERR |
Если имеет значение 1, bash показывает сообщения об ошибках, выдаваемые встроенной командой getopts (см. раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже). Переменная OPTERR инициализируется значением 1 при каждом вызове командного интерпретатора или выполнении сценария. |
LANG |
Используется для определения категории локализации (locale) для всех категорий, не заданных явно с помощью переменных, имена которых начинаются с LC_. |
LC_ALL |
Эта переменная переопределяет значение переменной LANG и всех остальных переменных LC_, задающих категорию локализации (locale). |
LC_COLLATE |
Эта переменная задает порядок сортировки, используемый при сортировке полученных по шаблону имен файлов, и определяет интерпретацию диапазонов, классов эквивалентостей и правила сравнения символов для подстановки имен файлов и сопоставления с шаблоном. |
LC_CTYPE |
Эта переменная определяет интерпретатцию символов и принадлежность символов к определенному классу для подстановки имен файлов и сопоставления с шаблоном. |
LC_MESSAGES |
Эта переменная определяет категорию локализации, используемую для обработки строк в двойных кавычках, перед которыми указан символ $. |
LC_NUMERIC |
Эта переменная определяет категорию локализации для числового формата. |
LINES |
Используется командой select для определения количества строк при печати списков выбора. Автоматически переустанавливается при получении сигнала SIGWINCH. |
COLUMNS |
Используется командой select для определения ширины терминала при печати списков выбора. Автоматически переустанавливается при получении сигнала SIGWINCH. |
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 добавит содержимое нового файла к уже существующему списку. Если HOSTFILE определен, но имеет пустое значение, bash пытается читать /etc/hosts для подстаноки имени хоста. Если переменная HOSTFILE удалена командой unset, список имен хостов очищается. |
auto_resume |
Эта переменная управляет взаимодействием командного интерпретатора с пользователем и средствами управления заданиями. Если она установлена, простые команды из одного слова и без перенаправлений рассматриваются как указатели возможного возобновления существующих остановленных заданий. Неоднозначность не допускается; если с введенной строки начинается более одного задания, выбирается последнее по времени приостановки задание. Имя остановленного задания, в этом контексте, - это командная строка, использовавшаяся для его запуска. Если эта переменная имеет значение exact, введенная строка должна точно совпадать с именем остановленного задания; Если же задано значение substring, введенная строка должна быть подстрокой имени остановленного задания. Это аналогично по возможностям идентификатору задания %? (см. раздел "УПРАВЛЕНИЕ ЗАДАНИЯМИ" ниже). Если установлено любое другое значение, введенная строка должна быть префиксом имени остановленного задания; это аналогично по возможностям идентфикатору задания %. |
COMPREPLY |
Переменная-массив, из которой bash читает возможные варианты завершения строки, генерируемые функцией сервиса программируемого завершения командной строки (см. ниже "Программируемое завершение"). |
Массивы |
bash поддерживает одномерные массивы. Любая переменная может использоваться как массив; встроенная команда declare позволяет объявить массив явно. Нет ограничения на рамер массива или требования непрерывности индексов. Элементы массива индексируются целыми числами, начиная с нуля. |
Массив создается автоматически при присваивании любой переменной значения с помощью конструкции имя[индекс]=значение. Индекс обрабатывается как арифметическое выражение, которое должно иметь неотрицательное значение. Для явного объявления массива используется команда declare -a имя (см. раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже). Конструкция declare -a имя[индекс] также поддерживается; индекс просто игнорируется. Для переменной типа массив можно задать атрибуты с помощью встроенных команд declare и readonly. Атрибут применяется ко всем элементам массива. |
Присваивания массивам выполняются с помощью конструкций вида имя=(значение1 ... значениеN), где каждое значение имеет вид [индекс]=строка. Обязательно задавать только строку. Если необязательные квадратные скобки и индекс указаны, присваивание выполняется элементу с соответствующим индексом; в противном случае, в качестве индекса элемента используется индекс последнего элемента, которому было присвоено значение, плюс один. Индексация начинается с нуля. Эту же конструкцию присваивания можно использовать и во встроенной команде declare. Значения отдельным элементам массива присваиваются с помощью представленной выше конструкции имя[индекс]=значение. |
На любой элемент массива можно сослаться с помощью конструкции ${имя[индекс]}. Фигурные скобки необходимы, чтобы избежать конфликтов при подстановке имен файлов. Если в качестве индекса указан символ @ или *, слово заменяется всеми элементами указанного массива. Эти индексы интерпретируются по-разному, только если слово указано в двойных кавычках. Если слово указано в двойных кавычках, конструкция ${имя[*]} заменяется одним словом, значение которого строится как значения каждого элемента массива, разделенные первым символом из значения переменной среды IFS, а конструкция ${имя[@]} заменяет каждый элемент массива имя отдельным словом. Когда массив пустой, ${имя[@]} заменяется пустой строкой. Это аналогично замене специальных параметров * и @ (см. секцию "Специальные параметры" выше). Конструкция ${#имя[индекс]} заменяется длиной элемента ${имя[индекс]}. Если в качестве индекса указан символ * или @, подставляется количество элементов массива. Ссылка на переменную-массив без индекса эквивалентна ссылке на элемент с индексом ноль. |
Для уничтожения массивов используется встроенная команда unset. Команда unset имя[индекс] уничтожает элемент массива с указанным индексом. Команда unset имя, где имя - имя массива, или 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 (см. раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже). |
Преобразование тильды |
Если слово начинается неэкранированным символом тильда (~), все символы до первого неэкранированного слеша (или все символы, если неэкранированного слеша в слове нет) считаются тильда-префиксом. Если ни один из символов тильда-префикса не замаскирован, его символы после тильды рассматриваются как возможное регистрационное имя (login name). Если это регистрационное имя представляет собой пустую строку, тильда заменяется значением переменной HOME. Если переменная HOME не установлена, подставляется домашний каталог пользователя, выполняющего процесс командного интерпретатора. Если же тильда-префикс не пустой, подставляется домашний каталог соответствующего пользователя. |
Если тильда-префикс имеет вид '~+', вместо него подставляется значение переменной PWD. Если тильда-префикс имеет вид '~-', вместо него подставляется значение переменной OLDPWD, если эта переменная установлена. Если среди символов после тильды в тильда-префиксе имеется число N, с необязательными префиксами '+' или '-', тильда-префикс заменяется соответствующим элементом из стека каталогов, который был бы выдан встроенной командой dirs при вызове с тильда-префиксом в качестве аргумента. Если символы после тильды содержат число без начального знака '+' или '-', предполагается '+'. |
Если соответствующего регистрационного имени не существует или преобразование тильды выполнить не удалось, исходное слово остается без изменений. |
Присваивания значений переменным проверяются на наличие незамаскированных тильда-префиксов сразу после : или =. В этих случаях также выполняется преобразование тильды. Соответственно, можно использовать имена файлов с тильдами в присваиваниях переменным PATH, MAILPATH и CDPATH, и командный интерпретатор выполнит необходимые замены. |
Преобразование параметров |
Символ '$' обозначает преобразование параметров, подстановку реультатов выполнения команд или арифметическую подстановку. Имя параметра можно брать в фигурные скобки, что позволяет отделить его от идущих непосредственно за ним символов, которые не являются частью имени. |
При использовании фигурных скобок, завершающей считается первая не экранированная слешем скобка '}', не входящая в строку в кавычках, встроенное арифметическое выражение, подставляемую команду или в подстановку значения другого параметра. |
${параметр} |
Подставляется значение указанного параметра (переменной). Фигурные скобки необходимы, если параметр является аргументом командной строки и номер позиции состоит из нескольких цифр или когда после параметра идет символ, не входящий в его имя. |
Если первый символ параметра - восклицательный знак, производится косвенная подстановка. bash использует значение переменной, имя которой задается остальной частью параметра, в качестве имени переменной, значение которой необходимо подставить. Это называется косвенной подстановкой. Исключением является описанная ниже конструкция ${!префикс*} |
В каждом из описанных ниже случаев в полученном слове выполняется преобразование тильды, преобразование параметров, подстановка результатов выполнения команд и арифметическая подстановка. Если не выполняется подстановка подстрок, bash проверяет, является ли параметр неопределенным или имеет пустое значение; если не указать двоеточие, проверяется только, определен ли параметр. |
${параметр:-слово} |
Использовать стандартное значение. Если параметр не определен или имеет пустое значение, подставляется значение указанного слова. Иначе подставляется значение параметра. |
${параметр:=слово} |
Присвоить стандартное значение. Если параметр не определен или имеет пустое значение, параметр получает значение указанного слова. Затем подставляется значение параметра. Присваивать таким образом значения позиционным и специальным параметрам нельзя. |
${параметр:?слово} |
Выдать ошибку о пустом или отсутствующем параметре. Если параметр имеет пустое значение или не определен, указанное слово (или стандартное сообщение, если слово не задано) выдается в стандартный поток ошибок и командный интерпретатор, если он неинтерактивный, завершает работу. В противном случае, подставляется значение параметра. |
${параметр:+слово} |
Использовать альтернативное значение. Если параметр не определен или имеет пустое значение, не подставляется ничего, в противном случае, подставляется указанное слово. |
${параметр:смещение} |
${параметр:смещение:длина} |
Подстановка подстрок. Подставляет символы значения параметра, начиная с указанного смещения и вплоть до заданной длины. Если длина не указана, подставляются символы с указанного смещения и до конца. В качестве длины и смещения можно задавать арифметические выражения (см. раздел "АРИФМЕТИЧЕСКИЕ ВЫРАЖЕНИЯ" ниже). Длина должна быть неотрицательным числом. Если смещение - отрицательное число, оно отсчитывается с конца значения параметра. Если параметр - @, результат содержит аргументы командной строки в количестве, соответствующем значению длины, начиная с аргумета с номером, соответствующим значению смещения. Если параметр - массив с индексом @ или *, результат содержит элементы массива в количестве, соответствующем значению длины, начиная с ${параметр[смещение]}. Идексация подстрок начинается с нуля, за исключением аргументов командной строки, которые индексируются, начиная с 1. |
${!префикс*} |
Подставляются имена переменных, начинающихся с префикса. Слова разделяются первым символом переменной IFS. |
${#параметр} |
Подставляется длина значения параметра в символах. Если параметр - * или @, подставляется количество аргументов командной строки. Если параметр - массив с индексом * или @, подставляется количество элементов массива. |
${параметр#слово} |
${параметр##слово} |
Слово рассматривается как шаблон, аналогичный шаблону имен файлов. Если шаблон сопоставляется с началом значения параметра, то результатом будет значение параметра, из которого удалена самая короткая (в случае "#") или самая длинная (в случае "##") подстрока, соответствующая шаблону. Если параметр - @ или *, операция удаления шаблона применяется поочередно к каждому аргументу командной строки и подставляется полученный в результате список. Если параметр - массив с индексом @ или *, операция удаления шаблона применяется поочередно к каждому элементу массива и подставляется полученный в результате список. |
${параметр%слово} |
${параметр%%слово} |
Слово рассматривается как шаблон, аналогичный шаблону имен файлов. Если шаблон сопоставляется с конечной частью значения параметра, то результатом будет значение параметра, из которого удалена самая короткая (в случае "%") или самая длинная (в случае "%%") подстрока. Если параметр - @ или *, операция удаления шаблона применяется поочередно к каждому аргументу командной строки и подставляется полученный в результате список. Если параметр - массив с индексом @ или *, операция удаления шаблона применяется поочередно к каждому элементу массива и подставляется полученный в результате список. |
${параметр/шаблон/строка} |
${параметр//шаблон/строка} |
Шаблон задается аналогично шаблонам имен файлов. Самая длинная подстрока значения параметра, соответствующая шаблону, заменяется указанной строкой. В первом случае, заменяется только первое вхождение. Во втором случае, заменяются все вхождения шаблона. Если шаблон начинается с #, он должен сопоставляться, начиная с начала значения параметра. Если же шаблон начинается с %, он должен сопоставляться с окончанием значения параметра. Если строка - пустая, соответсвующие шаблону подстроки удаляются и / после шаблона можно не указывать. Если параметр - @ или *, операция замены шаблона применяется поочередно к каждому аргументу командной строки, и подставляется полученный в результате список. Если параметр - массив с индексом @ или *, операция замены шаблона применяется поочередно к каждому элементу массива и подставляется полученный в результате список. |
Подстановка результатов выполнения команд |
Подстановка результатов выполнения команд позволяет результат, выдаваемый командой в стандартный выходной поток, подставить вместо имени команды. Имеется две формы такой подстановки: |
$(команда) |
или |
`команда` |
bash делает эту подстановку путем выполнения команды и замены этого выражения содержимым стандартного выходного потока команды, из которого удалены завершающие переводы строк. Встроенные переводы строк не удаляются, но они могут быть удалены при разбиении на слова. Подстановку результатов выполнения команды $(cat file) можно заменить эквивалентной, но более быстрой: $(< file). |
При использовании старой формы подстановки в обратных апострофах обратный слеш интерпретируется как литерал, если только после него не идут символы $, ` или \. Первый же обратный апостроф, не экранированный обратным слешем, завершает подставляемую команду. При использовании формы $(команда) все символы между круглыми скобками образуют команду - ни один не имеет специального значения. |
Подстановка результатов выполнения команд может быть вложенной. Для задания вложенной подстановки в форме с обратными апострофами замаскируйте внутренние обратные апострофы обратными слешами. |
Если подстановка задана в двойных кавычках, разбиение на слова и подстановка имен файлов в результатах не выполняется. |
Арифметическая подстановка |
При использовании арифметической подстановки вместо выражения подставляется результат его вычисления. Для вычисления арифметических выражений используется следующий формат: |
$((выражение)) |
Выражение обрабатывается так, как если бы оно было взято в двойные кавычки, но двойные кавычки в самом выражении не имеют специального значения. Во всех лексемах выражения выполняется подстановка значений параметров, подстановка строк, подстановка результатов выполнения команд и удаление экранирующих символов. Вычисления арифметических выражений могут быть вложенными. |
Вычисление выполняется по правилам, перечисленным ниже в разделе "АРИФМЕТИЧЕСКИЕ ВЫРАЖЕНИЯ". Если выражение недопустимо, 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 см. описание опций команды shopt в разделе "ВСТРОЕННЫЕ КОМНДЫ ИНТЕРПРЕТАТОРА" |
Переменная командного интерпретатора GLOBIGNORE может использоваться для ограничения множества имен файлов, соответствующих шаблону. Если переменная GLOBIGNORE установлена, каждое сопоставившееся имя файла, соответствующее также одному из шаблонов, заданных в GLOBIGNORE, удаляется из списка сопоставившихся. Имена файлов "." и ".." игнорируются всегда, даже если установлена переменная GLOBIGNORE. Однако при установке переменной GLOBIGNORE автоматически устанавливается опция интерпретатора dotglob, так что все остальные имена файлов, начинающиеся с ".", будут подставлены. Для получения старого поведения - игнорирования имен файлов, начинающихся с ".", - задайте ".*" как один из шаблонов в переменной GLOBIGNORE. Опция dotglob отключается, если переменная GLOBIGNORE не установлена. |
Сопоставление с шаблоном |
Любой символ в шаблоне, отличающийся от специальных, описанных выше, сопоставляется буквально. Символ NUL в шаблоне указывать нельзя. Специальные символы шаблона для буквального сопоставления необходимо маскировать. |
Специальные символы шаблона имеют следующие значения: |
* |
Соответствует любой строке, в том числе, пустой. |
? |
Соответствует любому одиночному символу. |
[...] |
Соответствует любому из символов в квадратных скобках. Пара символов, разделенная дефисом, задает диапазон символов; любой символ, лексически находящийся между этими двумя символами, включительно, будет соответствовать этой конструкции. Если сразу после [ идет символ ! или ^, то конструкции соответствует любой символ, не указанный в квадратных скобках. Порядок сортировки символов в диапазоне определяется текущей категорией локализации и значением переменной LC_COLLATE, если она определена. Для сопоставления с дефисом (-) его необходимо указать в квадратных скобках первым или последним. Для задания закрывающей квадратной скобки (]), ее необходимо указать как первый символ набора. |
В квадратных скобках можно задавать классы символов с помощью конструкции [:класс:], где класс - один из следующих классов, определяемых стандартом 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. |
bash специальным образом образом обрабатывает указанные в операторах перенаправления следующие имена файлов: |
/dev/fd/fd |
Если fd - корректное число, дублируется файловый дескриптор с номером fd. |
/dev/stdin |
Дублируется файловый дескриптор 0. |
/dev/stdout |
Дублируется файловый дескриптор 1. |
/dev/stderr |
Дублируется файловый дескриптор 2. |
/dev/tcp/host/port |
Если host - корректное доменное имя или IP-адрес, а port - целое число (номер порта), bash пытается открыть TCP-соединение с соответствующим сокетом. |
/dev/udp/host/port |
Если host - корректное доменное имя или IP-адрес, а port - целое число (номер порта), bash пытается послать/принять соответствующие UDP-датаграммы. |
Ошибка при открытии или создании файла приводит к отмене перенаправления. |
Перенаправление ввода |
Перенаправление входного потока приводит к открытию на чтение файла, имя которого получается в результате преобразований слова, через дескриптор файла n, или как стандартного входного потока (дескриптор файла 0), если n не указано. |
В общем случае перенаправление входного потока имеет вид: |
[n]<слово |
Перенаправление выходного потока |
Перенаправление входного потока приводит к открытию на запись файла, имя которого получается в результате преобразований слова, через дескриптор файла n, или как стандартного выходного потока (дескриптор файла 1), если n не указано. Если файл не существует, он создается; если существует - он усекается до нулевого размера. |
В общем случае перенаправление выходного потока имеет вид: |
[n]>слово |
Если используется оператор перенаправления > и с помощью встроенной команды set установлена опция noclobber, перенаправление не будет выполнено, если файл с соответствующим именем существует и является обычным файлом. Если используется оператор перенаправления >|, либо оператор перенаправления - > и опция noclobber с помощью встроенной команды set не установлена, перенаправление выполняется, даже если соответствующий файл существует. |
Добавление перенаправленного вывода |
Такое перенаправление вывода приводит к открытию файла, имя которого получается в результате преобразования слова, в режиме добавления через дескриптор файла n, или к добавлению в стандартный выходной поток (дескриптор файла 1), если n не указано. Если файл не существует, он создается. |
Перенаправление вывода на добавление имеет следующий общий вид: |
[n]>>слово |
Перенаправление выходного потока и потока ошибок |
bash позволяет перенаправить как стандартный выходной поток (дескриптор файла 1), так и стандартный поток ошибок (дескриптор файла 2) в файл, имя которого получается в результате преобразований слова. |
Для этого предлагается два формата конструкции перенаправления: |
&>слово |
и |
>&слово |
Первый формат является предпочтительным. Эта конструкция семантически эквивалентна следующей: |
>слово 2>&1 |
Встроенные документы (Here Documents) |
При этом типе перенаправления командный интерпретатор будет читать входные данные из текущего файла, пока не встретится строка, содержащая только указанное слово (без завершающих пробелов). Все прочитанные до этого строки затем используются как стандартный входной поток для команды. |
Документы встраиваются следующим образом: |
<<[-]слово встроенный документ ограничитель |
В слове не выполняется преобразование параметров, подстановка результатов выполнения команд, имен файлов или вычисление арифметических выражений. Если в слове есть экранированный символ, ограничитель является результатом удаления символов экранирования из слова, а строки встроенного документа не подлежат преобразованиям. Если в слове нет экранированных символов, во всех строках встроенного документа выполняется преобразование параметров, подстановка результатов выполнения команд и вычисление арифметических выражений. В этом случае пара <перевод_строки> игнорируется, и необходимо использовать \ для экранирования символов \, $ и `. |
Если в качестве оператора перенаправления используется <<-, то все начальные табуляции из входных строк и строки, содержащей ограничитель, удаляются. Это позволяет естественным образом выравнивать встроенные документы в сценариях командного интерпретатора. |
Дублирование файловых дескрипторов |
Оператор перенаправления |
[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 не изменяется. Переменной FUNCNAME присваивается имя выполняемой функции. Все остальные особенности среды выполнения командного интерпретатора у функции и вызывающей ее команды идентичны, только обработчик ловушки DEBUG (см. описание встроенной команды trap в разделе "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже) не наследуется. |
Можно объявлять локальные переменные функции с помощью встроенной команды local. Обычно переменные и их значения совместно используются функцией и вызвавшей ее командой. |
Если в функции выполняется встроенная команда return, эта функция завершается и выполнение продолжается со следующей команды после вызова функции. Когда функция завершается, восстанавливаются значения позиционных параметров и специального параметра #, которые были до выполнения функции. |
Имена и определения функций можно получить с помощью опции -f встроенных команд declare или typeset. С опцией -F встроенные команды declare и typeset будут выдавать только имена функций. Функции можно экспортировать, при этом они будут автоматически определены в порожденных командных интерпретаторах с помощью опции -f встроенной команды export. |
Функции могут быть рекурсивными. Глубина рекурсии не ограничена. |
АРИФМЕТИЧЕСКИЕ ВЫРАЖЕНИЯ
Командный интерпретатор в определенных случаях обеспечивает вычисление арифметических выражений (см. встроенную команду let и подраздел "Арифметические подстановки" ранее). Вычисление выполняется в длинных целых числах без проверки переполнения, хотя деление на 0 перехватывается и выдается соответствующее сообщение об ошибке. Арифметические операции, их приоритет и ассоциативность такие же, как в языке Си. Операторы в следующем списке сгруппированы по уровням с одинаковым приоритетом. Уровни перечислены в порядке убывания приоритета. |
id++ id-- |
пост-инкремент и пост-декремент |
++id --id |
пре-инкремент и пре-дектремент |
- + |
унарные минус и плюс |
! ~ |
логическое и побитовое отрицание |
** возведение в степень |
* / % |
умножение, деление, остаток |
+ - |
сложение, вычитание |
<< >> |
побитовые сдвиги влево и вправо |
<= >= < > |
операции сравнения |
== != |
проверки на равенство и неравенство |
& побитовое И |
^ побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ |
| побитовое ИЛИ |
&& логическое И |
|| логическое ИЛИ |
выражение1?выражение2:выражение3 |
условная операция |
= *= /= %= += -= <<= >>= &= ^= |= |
присваивания |
выражение1 , выражение2 |
запятая |
В качестве операндов можно использовать переменные командного интерпретатора; перед вычислением выполняется преобразование параметров. Значение параметра в арифметическом выражении приводится к длинному целому. Чтобы переменную командного интерпретатора можно было использовать в арифметических выражениях, ее атрибут integer устанавливать не обязательно. |
Константы с начальным 0 интерпретируются как восьмеричные числа. Начальные 0x или 0X обозначают шестнадцатеричную константу. В остальных случаях числа имеют вид [основание#]n, где основание - десятичное число от 2 до 64, представляющее основание системы счисления, а n - число в этой системе счисления. Если основание не указано, используется основание 10. Цифры, большие 9, представляются строчными буквами, прописными буквами, символами _ и @, именно в таком порядке. Если основание меньше или равно 36, прописные и строчные буквы эквивалентны и используются для представления чисел от 10 до 35. |
Операции выполняются в порядке приоритетов. Сначала вычисляются подвыражения в круглых скобках, которые позволяют переопределить представленные выше стандартные приоритеты операторов. |
УСЛОВНЫЕ ВЫРАЖЕНИЯ
Условные выражения используются составной командой [[ и встроенными командами test и [ для проверки атрибутов файла и выполнения строковых и арифметических сравнений. Выражения формируются из следующих унарных и бинарных элементарных условий. Если любой из аргументов файл в одном из условий имеет вид /dev/fd/n, проверяется открытый файл с дескриптором n. Если любой из аргументов файл в одном из условий имеет вид /dev/stdin, /dev/stdout или /dev/stderr проверяется открытый файл с дескриптором 0, 1 или 2, соответственно. |
-a файл |
Истинно, если файл существует. |
-b файл |
Истинно, если файл существует и является специальным блочным устройством. |
-c файл |
Истинно, если файл существует и является специальным символьным устройством. |
-d файл |
Истинно, если файл существует и является директорией. |
-e файл |
Истинно, если файл существует. |
-f файл |
Истинно, если файл существует и является обычным файлом. |
-g файл |
Истинно, если файл существует и имеет установленный бит SGID. |
-h файл |
Истинно, если файл существует и является символической ссылкой. |
-k файл |
Истинно, если файл существует и имеет установленный sticky-бит. |
-p файл |
Истинно, если файл существует и является именованным каналом (FIFO). |
-r файл |
Истинно, если файл существует и доступен для чтения. |
-s файл |
Истинно, если файл существует и имеет ненулевой размер. |
-t fd |
Истинно, если файловый дескриптор fd открыт и соответствует терминалу. |
-u файл |
Истинно, если файл существует и имеет установленный бит SUID. |
-w файл |
Истинно, если файл существует и доступен для записи. |
-x файл |
Истинно, если файл существует и является выполняемым. |
-O файл |
Истинно, если файл существует и принадлежит пользователю с текущим EUID. |
-G файл |
Истинно, если файл существует и принадлежит группе с текущим EGID. |
-L файл |
Истинно, если файл существует и является символической ссылкой. |
-S файл |
Истинно, если файл существует и является сокетом. |
-N файл |
Истинно, если файл существует и был модифицирован с момента последнего чтения. |
файл1 -nt файл2 |
Истинно, если файл1 новее, чем файл2 (в соответствии с датой модификации). |
файл1 -ot файл2 |
Истинно, если файл1 старее, чем файл2. |
файл1 -ef файл2 |
Истинно, если файл1 и файл2 находятся на одном устройстве и имеют одинаковые номера i-узлов. |
-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 могут быть любыми целыми числами. |
ОБРАБОТКА ПРОСТОЙ КОМАНДЫ
При обработке простой команды командный интерпретатор делает, слева направо, следующие преобразования, присваивания и перенаправления. |
1. |
Слова, помеченные синтаксическим анализатором как присваивания переменным (те, что идут перед именем команды) и перенаправления сохраняются для дальнейшей обработки. |
2. |
В остальных словах выполняются подстановки и замены. Если после этого остались какие-то слова, первое из них считается именем команды, а остальные - ее аргументами. |
3. |
Перенаправления выполняются так, как описано ранее в разделе "ПЕРЕНАПРАВЛЕНИЕ". |
4. |
В тексте после = в каждом присваивании переменной перед присваиванием выполняется преобразование тильды, преобразование параметров, подстановка результатов выполнения команд, арифметические подстановки, а также удаление символов экранирования. |
Если в результате имени команды нет, присваивания переменным влияют на среду текущего командного интерпретатора. В противном случае, переменные добавляются в среду выполняемой команды и не влияют на среду текущего командного интерпретатора. Если происходит попытка присвоить значение переменной с атрибутом только для чтения, выдается сообщение об ошибке и команда завершается с ненулевым статусом выхода. |
Если в результате имени команды нет, перенаправления выполняются, но не влияют на среду текущего командного интерпретатора. При ошибке перенаправления команда завершается с ненулевым статусом выхода. |
Если после подстановок имя команды осталось, выполнение прдолжается так, как описано ниже. В противном случае, выполнение команды завершается. При этом если выполнялись подстановки результатов выполнения команд, статус выхода будет равен статусу последней команды, результаты которой были подставлены. Если подстановок результатов выполнения команд не было, команда завершается со статусом выхода ноль. |
ВЫПОЛНЕНИЕ КОМАНДЫ
После разбиения команды на слова, если в результате получилась простая команда с необязательным списком аргументов, выполняются следующие действия. |
Если имя команды не содержит слешей, командный интерпретатор пытается ее найти. Если существует функция командного интерпретатора с таким именем, она вызывается как было описано выше в разделе "ФУНКЦИИ". Если же функции с таким именем нет, командный интерпретатор ищет ее в списке встроенных команд. Если такая встроенная команда есть, она выполняется. |
Если имя не является именем функции или именем встроенной команды и не содержит слеши, bash просматривает каждый каталог в значении переменной PATH в поисках выполняемого файла с соответствующим именем. Для запоминания полных имен выполняемых файлов bash использует хэш-таблицу (см. описание команды hash в разделе "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" далее). Полный поиск по каталогам в PATH выполняется только если команда не найдена в этой хэш-таблице. Если команда при таком поиске не найдена, командный интерпретатор выдает соответствующее сообщение и завершает выполнение команды со статусом выхода 127. |
Если команда найдена или имя команды содержит слеши, командный интерпретатор выполняет соответствующую команду в отдельной среде выполнения. Аргумент 0 устанавливается равным имени команды, и ей передаются параметры, соответствующие аргументам в командной строке, если они заданы. |
Если выполнить команду не удалось, потому что файл не соответствует поддерживаемым выполняемым форматам, и этот файл не является каталогом, предполагается, что файл является сценарием командного интерпретатора, содержащим его команды. Для его выполнения запускается порожденный командный интерпретатор. Этот порожденный командный интерпретатор переинициализируется, как если бы для обработки сценария был вызван новый командный интерпретатор, но только местонахождения команд, запомненные родительским интерпретатором (см. описание команды hash ниже в разделе "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА"), передаются порожденному. |
Если текст в файле начинается с #!, остаток первой строки задает интерпретатор для программы. Командный интерпретатор запускает указанный интерпретатор в операционных системах, которые не поддреживают соответствующий формат выполняемого файла непосредственно. Этому интерпретатору в качестве аргументов передается один необязательный аргумент, затем имя интерпретатора из первой строки программы, затем имя самой программы и ее аргументы, если они заданы. |
СРЕДА ВЫПОЛНЕНИЯ КОМАНД
У командного интерпретатора есть среда выполнения, содержащая следующие компоненты: |
- |
открытые файлы, унаследованные командным интерпретатором при вызове, с учетом изменений, вызванных перенаправлениями, переданными встроенной команде exec; |
- |
текущий рабочий каталог, установленный командами cd, pushd или popd, или унаследованный командным интерпретатором при вызове; |
- |
маска режима создания файла, установленная с помощью команды umask или унаследованная от родительского процесса; |
- |
текущие обработчики сигналов и ловушек, установленные с помощью trap; |
- |
параметры командного интерпретатора, установленные путем присваивания переменным или унаследованные из среды родительского процесса; |
- |
функции, заданные в ходе выполнения или унаследованные из среды родительского процесса; |
- |
опции, установленные при вызове (как стандартные, так и заданные явно в командной строке) или установленные с помощью комнады set; |
- |
опции, установленные с помощью команды shopt; |
- |
псевдонимы, заданные с помощью команды alias; |
- |
идентификаторы различных процессов, в том числе, для фоновых заданий, значение параметра $$ и значение параметра $PPID. |
Когда необходимо выполнить команду, не являющуюся встроенной или функцией командного интерпретатора, она вызывается в отдельной среде выполнения, состоящей из указанных ниже компонентов. Если не указано иначе, все значения наследуются от командного интерпретатора: |
- |
открытые файлы командного интерпретатора плюс любые изменения и дополнения, заданные для команды перенаправлениями; |
- |
текущий рабочий каталог; |
- |
маска режима создания файлов; |
- |
переменные командного интерпретатора, помеченные как экспортируемые, а также переменные, экспортированные для команды и переданные в среде; |
- |
наследуются установленные в родительском командном интерпретаторе обработчики сигналов и ловушек, а сигналы, в нем игнорировавшиеся, также игнорируются. |
Команда, вызванная в этой отдельной среде, не может повлиять на среду выполнения родительского командного интерпретатора. |
Команды, результаты которых необходимо подставить, и асинхронные команды вызываются в средах порожденных командных интерпретаторов, которые совпадают со средой родительского, но обработчки сигналов устанавливаются такие, как были унаследованы родительским командным интерпретатором при вызове. Встроенные команды, вызываемые как часть конвейера, также выполняются в среде порожденного командного интерпретатора. Изменения в среде порожденного командного интерпретатора не затрагивают среду выполнения родительского интерпретатора. |
ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ
При вызове программы ей передается массив строк, который называют средой окружения. Это список пар вида имя=значение. |
Командный интерпретатор позволяет манипулировать переменными окружения несколькими способами. При вызове командный интерпретатор просматривает свою среду и создает одноименный параметр для каждого имени, автоматически экспортируя его для порожденных процессов. Выполняемые команды наследуют среду. Команды export и declare -x позволяют добавлять и удалять параметры и функции из среды. Если значение параметра, входящего в среду, изменено, новое значение становится частью среды, заменяя старое. Среда, наследуемая выполняемой командой, состоит из начальной среды командного интерпретатора, значения которой могли быть изменены в ходе его работы, за исключением пар, удаленных с помощью команды unset, и новых параметров, добавленных с помощью команд export и declare -x. |
Среда для любой простой команды или функции может быть временно дополнена путем задания перед именем присваиваний параметрам, как описано ранее в разделе "ПАРАМЕТРЫ". Эти операторы присваивания влияют только на среду вызываемой команды. |
Если установлена опция -k, (см. описание встроенной команды set ниже), то все параметры с присвоенными при вызове значениями, а не только предшествующие имени команды, помещаются в ее среду. |
Когда командный интерпретатор bash вызывает внешнюю команду, переменная _ устанавливается равной полному имени файла команды и передается этой команде в среде. |
СТАТУС ВЫХОДА
С точки зрения командного интерпретатора, команда, завершившаяся с кодом выхода 0, сработала успешно. Статус выхода 0 означает успешное завершение. Ненулевой статус выхода означает неудачу. Если работа команды прервана сигналом с номером N, bash использует в качестве статуса выхода значение 128+N. |
Если команда не найдена, порожденный для ее выполнения процесс возвращает статус выхода 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 |
доменное имя хоста |
j |
количество обрабатываемых в данный момент заданий |
l |
основное имя текущего терминала |
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-xC-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 |
звонок (bell) |
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 не будет выполнять завершение слов. Символы завершения будут вставляться в строку буквально, как если бы их переназначили с помощью self-insert. |
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-standard и 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 |
Ниже представлен список имен команд и стандартные комбинации клавиш, к которым они привязаны. Имена команд, для которых не указана комбинация клавиш, по умолчанию ни к какой комбинации не привязаны. В последующих описаниях под "позицией" подразумевается текущее положение курсора, а под "пометкой" - позиция курсора, сохраненная командой set-mark. Текст между двумя этими позициями называется "регионом". |
Команды для перемещения |
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 (Rubout) |
Удаляет символ перед курсором. При указании числового аргумента сохраняет удаленный текст в кольцевом буфере (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 Rubout) |
Удаляет текст от текущей позиции к началу строки. |
unix-line-discard (C-u) |
Удаляет текст от текущей позиции до начала строки. Удаленный текст помещается в кольцевой буфер. |
kill-whole-line |
Удаляет все символы текущей строки, независимо от позиции курсора. |
kill-word (M-d) |
Удаляет символы от курсора до конца слова или, если курсор стоит между словами, до конца следующего слова. Границы слов определяются так же, как и для команды forward-word. |
backward-kill-word (M-Rubout) |
Удаляет слово перед курсором. Границы слова определяются так же, как и в команде backward-word. |
unix-word-rubout (C-w) |
Удаляет слово перед курсором, используя в качестве ограничителя слов пробельные символы. Удаленный текст помещается в кольцевой буфер. |
delete-horizontal-space (M-) |
Удаляет все пробелы и символы табуляции вокруг текущей позиции. |
kill-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. Если comment-begin содержит значение по умолчанию, текущая строка становится комментарием командного интерпретатора. |
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. |
Программируемое завершение |
При попытке применить завершение слова к аргументу команды, для которой с помощью встроенной команды complete (см. "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" далее) указана спецификация завершения, вызываются сервисы программируемого завершения командной строки. |
Сначала идентифицируется имя команды. Если для нее определена спецификация завершения, эта спецификация используется для генерации списка возможных завершений слова. Если слово команды - полный путь к файлу, сначала ищется спецификация, соответствующая этому полному пути. Если нет спецификации, соответствующей полному пути, ищется спецификация, соответствующая части имени после последнего слеша. |
Как только найдена подходящая спецификация завершения, она используется для генерации списка сопоставляющихся слов. Если подходящая спецификация не найдена, выполняется стандартное завершение bash, описанное ранее в секции "Завершение". |
В первую очередь выполняются действия, указанные в используемой спецификации завершения. Возвращаются только те соответствия, которые сопоставляются с завершаемым префиксом. Если для завершения имени файла или каталога использованы опции -f или -d, для фильтрации соответствий используется переменная FIGNORE. |
Затем генерируются завершения, задаваемые шаблоном подстановки имени файла для опции -G. Слова, сгенерированные по этому шаблону, не обязаны соответствовать завершаемому слову. Переменная GLOBIGNORE не используется для фильтрации соответствий, однако для этого используется FIGNORE. |
Затем подставляется строка, указанная в опции -W. Строка предварительно разбивается на слова при помощи ограничителей из переменной IFS, при этом учитывается экранирование. Затем каждое слово подвергается преобразованию скобок, преобразованию тильды, преобразованию параметров, подстановке результатов команды, арифметической подстановке и подстановке имен файлов, как описано ранее в разделе "ПРЕОБРАЗОВАНИЯ". Результат разбивается на слова. Результат преобразований сравнивается с завершаемым префиксом, сопоставляющиеся слова становятся возможными завершениями. |
После генерации сопоставляющихся завершений вызывается команда или функция интерпретатора, указанная в опциях -F и -C. Если вызывается команда или функция, переменные COMP_LINE и COMP_POINT получают значения, как описано выше в секции "Переменные командного интерпретатора". Если вызывается функция командного интерпретатора, то переменные COMP_WORDS и COMP_CWORD также получают соответствующие значения. Когда вызывается функция или команда, ее первым аргументом становится имя команды, чьи аргументы завершаются, вторым аргументом становится завершаемое слово, а третьим аргументом - слово, предшествующее завершаемому в командной строке. К сгенерированным завершениям не применяются никакие фильтры. Функция или команда имеют полную свободу действий при генерации соответствия. |
Первой вызывается функция, указанная в опции -F. Для генерации завершений функция может использовать любые средства оболочки, включая встроенную команду compgen, описанную ниже. Она должна помещать сгенерированные завершения в переменную-массив COMPREPLY. |
Затем вызывается команда, указанная в опции -C. Среда выполнения этой команды такая же, как в случае подстановки результатов команды. Команда должна выводить список завершений по одному в строке на стандартный выходной поток. Обратный слеш может при необходимости экранировать символ перевода строки. |
После того, как все возможные завершения сгенерированы, к ним применяется фильтр, указанный в опции -X. Фильтр представляет собой такой же шаблон, как и в случае подстановок имен файлов. Символ & в шаблоне заменяется на текст завершаемого слова. Символ & может быть экранирован обратным слешем, при этом перед подстановкой обратный слеш убирается, а следующий за ним символ & теряет свое специальное значение. Все завершения, сопоставляющиеся с шаблоном, удаляются из списка. Если первым указан символ !, действие шаблона инвертируется: удалены будут завершения, не сопоставляющиеся с шаблоном. |
После всего этого к каждому члену списка завершений побавляются префикс и суффикс, заданные в опциях -P и -S. Результат выдается модулю завершения библиотеки readline как список возможных завершений. |
Если описанные действия не сгенерировали ни одного завершения, а при определении спецификации завершения в команде complete была указана опция -o dirnames, выполняется попытка завршить слово как имя каталога. |
По умолчанию, если найдена спецификация завершения, все, что по ней генерируется, возвращается модулю завершения как полное множество возможных завршений. Стандартные средства завершения bash не применяются, а стандартное завершение имен файлов библиотеки readline отключаются. Если при определении спецификации завершения в команде complete указана опция -o default, в случае, когда спецификация завершения не сгенерирует ни одного завершения, используется стандартное завершение библиотеки readline. |
ИСТОРИЯ ВЫПОЛНЕНИЯ КОМАНД
При включении опции -o history с помощью встроенной команды set, командный интерпретатор беспечивает доступ к истории выполнения команд - списку ранее введенных команд. Значение переменной HISTSIZE определяет размер списка. Текст последних 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 ранее в секции "Переменные командного интерпретатора"). |
Пометки событий |
Пометка события (event designator) - это ссылка на элемент командной строки в списке истории. |
! |
Начинает подстановку из списка выполненных команд, если только далее не идет пробел, перевод строки, = или (. |
!n |
Ссылка на командную строку n. |
!-n |
Ссылка на текущую строку минус n. |
!! |
Ссылка на предыдущую команду. Это синоним для команды "!-1". |
!строка |
Ссылка на самую недавнюю команду, начинающуюся со строки. |
!?строка[?] |
Ссылка на самую недавнюю команду, содержащую строку. Завершающий символ ? можно не указывать, если сразу после строки идет новая строка. |
^строка1^строка2^ |
Быстрая подстановка. Повторить последнюю команду, заменяя строку1 строкой2. Аналогично "!!:s/строка1/строка2/" (см. секцию "Модификаторы" ниже). |
!# |
Вся набранная до этого момента командная строка. |
Пометки слов |
Пометки слов (word designators) используются для выбора необходимых слов из события. Двоечточие (:) отделяет пометку слова от спецификации события. Его можно не указывать, если пометка слова начинается символом ^, $, *, - или %. Слова нумеруются с начала строки, причем первое слово имеет номер 0. Слова вставляются в текущую строку через один пробел. |
0 (zero) |
Нулевое слово. Для командного интерпретатора это - имя команды. |
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, файл с указанным именем не найден и bash работает в режиме posix, файл ищется в текущем каталоге. Если отключена опция 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] -x keyseq:команда |
bind [-m keymap] keyseq:функция |
Выдает текущие привязки клавиш и функций библиотеки readline или привязывает комбинацию клавиш к функции или макросу readline. При этом поддерживается такой же синтаксис привязки, как и в файле .inputrc, но каждая привязка должна передаваться как отдельный аргумент; т.е. '"C-xC-r": re-read-init-file'. Опции, если они переданы, имеют следующие значения: |
-m keymap |
Использовать набор 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. |
-x 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 является статус выхода выполненной команды. |
compgen [опции] [слово] |
Сгенерировать возможные соответствия для завершения указанного слова с учетом опций, таких же, как для встроенной команды complete за исключением -p и -r. Соответствия выдаются в стандарный выходной поток. При использовании опций -F или -C, переменные окружения командного интерпретатора, используемые в сервисе программируемого завершения командной строки, по возможности использоваться не будут. |
Соответствия будут сгенерированы так же, как если бы они были сгенерированы непосредственно сервисом программируемого завершения командной строки с указанными флагами. Если указано слово, будут отображены только те соответствия, которые сопоставляются с указанным словом. |
Статус выхода 0, кроме случаев, когда указана неправильная опция или не найдены соответствия. |
complete [-abcdefjkvu] [-o опция] [-A действие] [-G globpat] [-W список_слов] [-P префикс] [-S суффикс] [-X filterpat] [-F функция] [-C команда] имя [имя ...] |
complete -pr [имя ...] |
Указать, как выполнять завершение указанных имен. Если указана опция -p или не указано никаких опций, выводятся текущие спецификации завершений командной строки в пригодном для использования виде. Опция -r удаляет спецификацию завершения для указанных имен, а если ни одно имя не указано - то все спецификации. |
Порядок применения этих спецификаций завершения указан выше в секции "Программируемое завершение". |
Другие опции имеют указанные ниже значения. Аргументы для опций -G, -W и -X (а также, при необходимости, -P и -S) следует экранировать, чтобы предотвратить выполнение преобразований до вызова команды complete. |
-o опция |
Указанная опция, кроме простой генерации завершений, определяет еще несколько аспектов поведения команды comspec и может быть одной из перечисленных: |
default |
Использовать стандартное завершение readline, если compspec не генерирует ни одного соответствия. |
dirnames |
Выполнить завершение имени директории, если compspec не генерирует ни одного соответствия. |
filenames |
Указать readline, что compspec генерирует имена файлов, так что readline будет выполнять любые специфичные для файлов способы обработки (например, добавление слешей к именам директорий или удаление завершающих пробелов). Опция предназначения для использования с функциями командного интерпретатора. |
-A действие |
В качестве действия для генерации списка возможных завершений может использоваться: |
alias |
имена псевдонимов (также можно указать как -a); |
arrayvar |
имена переменных-массивов; |
binding |
имена привязок клавиш readline; |
builtin |
имена встроенных команд интерпретатора (также можно указать как -b); |
command |
имена команд (также можно указать как -c); |
directory |
имена каталогов (также можно указать как -d); |
disabled |
имена отключенных встроенных команд; |
enabled |
имена включенных встроенных команд; |
export |
имена экспортируемых переменных (также можно указать как -e) |
file |
имена файлов (также можно указать как -f) |
function |
имена функций командного интерпретатора; |
helptopic |
названия разделов подсказки для встроенной команды help; |
hostname |
имена хостов, полученные из файла, указанного в переменной HOSTFILE; |
job |
имена заданий, если управление заданиями включено (также можно указать как -j); |
keyword |
ключевые слова командного интерпретатора (также можно указать как -k); |
running |
имена выполняемых заданий, если управление заданиями включено; |
setopt |
допустимые аргументы для опции -o встроенной команды set; |
shopt |
имена опций командного интерпретатора, допускаемые встроенной командой shopt; |
signal |
имена сигналов; |
stopped |
имена приостановленных заданий, если управление заданиями включено; |
user |
имена пользователей (также можно указать как -u); |
variable |
имена переменных (также можно указать как -v); |
-G globpat |
Для генерации возможных завершений используется подстановка имен файлов с шаблоном globpat. |
-W список_слов |
Параметр список_слов разбивается на слова при помощи символов-разделителей из переменной IFS, и каждое слово подвергается преобразованиям. Возможные завершения являются членами результирующего списка, которые сопоставляются с завершаемым словом. |
-C команда |
Команда выполняется в порожденном интерпретаторе, а ее выход используется как возможные завершения. |
-F функция |
Указанная функция выполняется в среде текущего командного интерпретатора. После окончания ее работы возможные завершения командной строки подставляются из переменной-массива COMPREPLY. |
-X filterpat |
filterpat - это шаблон для подстановки имен файлов. Он применяется к списку возможных завершений, сгенерированному предыдущими опциями и аргументами, и все завершения, сопоставляющиеся с шаблоном filterpat, удаляются из списка. Первый символ ! в filterpat инвертирует шаблон; в этом случае удаляются все завершения, не сопоставляющиеся с шаблоном. |
-P префикс |
После применения всех остальных опций в начало каждого возможного завершения добавляется указанный префикс. |
-S суффикс |
После применения всех остальных опций в конец каждого возможного завершения добавляется указанный суффикс. |
Команда возвращает истину (0), кроме случаев, когда указана неправильная опция, указана опция без имени (это не касается опций -p или -r), совершена попытка удалить несуществующую спецификацию завершения или произошла ошибка при добавлении спецификации завершения. |
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 |
Делает соответствующие переменные доступными только для чтения. Этим переменным нельзя присваивать значения в следующих операторах и их нельзя сбрасывать командой unset. |
-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 отключает интерпретацию этих управляющих последовательностей даже в системах, где они интерпретируются по умолчанию. Опция оболочки xpg_echo используется для определения, интерпретировать ли команде echo управляющие последовательности по умолчанию. Команда echo не распознает -- как признак завершения опций. Команда echo интерпретирует следующие управляющие последовательности: |
a |
сигнал (звонок) |
b |
забой |
c |
не выводить завершающие символы новой строки |
e |
управляющий символ |
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 [-s] [шаблон] |
Выдает справочную информацию о встроенных командах. Если шаблон указан, команда help выдает детальную справочную информацию о всех командах, соответствующих шаблону; в противном случае, выдается справка по всем встроенным командам и управляющим структурам интерпретатора. Опция -s ограничивает вывод лишь информацией о формате команды. Статус возврата 0, корме случаев, когда соответствие шаблону не найдено. |
history [n] |
history -c |
history -d номер |
history -anrw [файл] |
history -p аргумент [аргумент ...] |
history -s аргумент [аргумент ...] |
Если опции не указаны, выдает список истории команд с номерами строк. Строки, для которых указана звездочка (*), были изменены. При указании аргумента n выдаются только последние n строк. Если указан файл, список истории берется из этого файла; в противном случае используется значение переменной HISTFILE. Опции имеют следующие значения: |
-c |
Очистить список истории выполнения команд, удаляя все записи. |
-d номер |
Удалить запись под указанным номером из списка истории. |
-a |
Добавлять "новые" строки истории (строки истории, введенные с начала текущего сеанса bash) в файл истории. |
-n |
Читать строки истории, еще не прочитанные из файла истории, в текущий список истории команд. Речь идет о строках, добавленных в файл истории с начала текущего сеанса bash. |
-r |
Читать содержимое файла истории и использовать его в качестве текущего списка истории выполнения команд. |
-w |
Записывать текущий список истории команд в файл истории, переписывая его текущее содержимое. |
-p |
Выполнить подстановку из списка истории для последующих аргументов и выдать результат в стандартный выходной поток. Результат не запоминается в списке истории. Для отключения обычной подстановки из списка истории, необходимо экранировать каждый аргумент. |
-s |
Сохранить аргументы в списке истории как одну запись. Последняя команда в списке истории удаляется перед добавлением аргументов. |
Возвращается значение 0, кроме случаев, когда передана недопустимая опция, при попытке чтения или записи файла истории произошла ошибка, указан неверный номер для опции -d или невозможно выплнить подстановку из списка истории для опции -p. |
jobs [-lnprs] [ задание ... ] |
jobs -x команда [ аргументы ... ] |
Первая форма команды выводит список активных заданий. Опции имеют следующие значения: |
-l |
Кроме обычной информации выдает идентификаторы процессов. |
-p |
Выдает только идентификаторы процессов-лидеров групп процессов, образующих задание. |
-n |
Выдает информацию только о заданиях, состояние которых изменилось с момента последнего уведомления пользователя о состоянии заданий. |
-r |
Выдает только выполняющиеся задания. |
-s |
Выдает только остановленные задания. |
Если указано задание, выдается информация только об этом задании. Статус выхода 0, если только не указана недопустимая опция или идентификатор несуществующего задания. |
Если указана опция -x, команда jobs заменяет любой идентификатор задания в команде или аргументах соответствующим идентификатором группы процессов, и выполняет команду, передавая ей аргументы и возвращая ее статус выхода. |
kill [-s сигнал | -n номер | -сигнал] [pid | задание] ... |
kill -l [сигнал | статус_выхода] |
Посылает указанный по имени или номеру сигнал процессам с указанными идентификаторами (pid) или входящим в задание с указанным идентификатором. Сигнал задается либо по имени, например, 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 требует выдать соответствующий аргумент в формате, который можно повторно использовать в качестве входных данных командного интерпретатора. |
Формат при необходимости используется повторно, чтобы покрыть все аргументы. Если формат требует больше аргументов, чем передано, дополнительные спецификации формата раскрываются как если бы были переданы нулевые значения или пустые строки, соответственно. Статус возврата 0 при успешном выполнении команды и ненулевой при ошибке. |
pushd [-n] [каталог] |
pushd [-n] [+n] [-n] |
Добавляет каталог на вершину стека каталогов или прокручивает стек, делая новый верхний элемент стека текущим рабочим каталогом. При вызове без аргументов, меняет местами два верхних каталога и возвращает 0, если стек каталогов не пустой. Аргументы имеют следующие значения: |
+n |
Прокручивает стек так, что n-ный (начиная с 0) каталог с начала списка каталогов, выдаваемых командой dir, становится вершиной. |
-n |
Прокручивает стек так, что n-ный (начиная с 0) каталог с конца списка каталогов, выдаваемых командой dir, становится вершиной. |
-n |
Эта опция подавляет обычный переход в каталог при добавлении каталогов в стек, так что действия выполняются только со стеком. |
каталог |
Добавляет каталог на вершину стека каталогов, делая его текущим рабочим каталогом. |
Если команда pushd выполнена успешно, выполняется также команда dirs. Если используется первая форма, pushd возвращает 0 за исключением случая, когда не удалось перейти в каталог. При использовании второй формы pushd возвращает 0, если только стек каталогов не пустой, не указан несуществующий элемент стека и не удалось перейти в новый текущий каталог. |
pwd [-LP] |
Выдает полное имя текущего каталога. Выдаваемое имя файла не содержит символьных связей, если указана опция -P или включена опция physical встроенной команды set. Если использована опция -L, выполняется проход по символьным связям. Статус выхода - 0, если не возникла ошибка при чтении имени текущего каталога или не передана недопустимая опция. |
read [-ers] [-t таймаут] [-a имя_массива] [-p приглашение] [-n количество] [-d delim] [имя ...] |
Читает одну строку из стандартного входного потока и присваивает первое слово первому имени, второе слово - второму имени, и так далее, так что оставшиеся слова вместе с разделителями между ними присваиваются в качестве значения последнему имени. Если из входного потока прочитано меньше слов, чем указано имен, остальные имена получают пустые значения. Для разбиения строки на слова используются символы, указанные в переменной IFS. Символ обратного слеша (\) можно использовать для экранирования символов со специальным значением и для продолжения ввода на следующей строке. Опции имеют следующие значения: |
-a имя_массива |
Слова присваиваются последовательным элементам массива имя_массива, начиная с 0. Имя_массива сбрасывается перед присваиванием новых значений. Другие имена в аргументах игнорируются. |
-d delim |
Первый символ указанной строки delim используется вместо <перевода_строки> для ограничения вводимой строки. |
-e |
Если стандартный входной поток идет с терминала, для получения строки используется библиотека readline (см. раздел "READLINE" ранее). |
-n количество |
read завершается после получения указанного количества символов, не дожидаясь получения ограничителя строки. |
-p приглашение |
Выдает приглашение без завершающего перевода строки перед чтением входного потока. Приглашение выдается только если входные данные идут с терминала. |
-r |
Обратный слеш не обрабатывается как символ экранирования. Он считается частью строки. В частности, его нельзя использовать для продолжения ввода на следующей строке. |
-s |
"Тихий" режим. Если входной поток связан с терминалом, вводимые символы не отображаются. |
-t таймаут |
Вынуждает read завершиться с ошибкой если во входном потоке не появится строка для ввода в течение указанного времени таймаута в секундах. Опция не имеет эффекта, если входной поток не связан с терминалом или каналом (pipe). |
Если имена не указаны, прочитанная строка присваивается переменной REPLY. Статус выхода - 0, за исключением случаев, когда произошел таймаут или во входном потоке встретился символ конца файла. |
readonly [-apf] [имя ...] |
Указанные имена помечаются как доступные только для чтения; значения соответствующих переменных нельзя изменять в дальнейшем с помощью присваивания. Если указана опция -f, только для чтения помечаются функции, соответствующие именам. Опция -a ограничивает действие только массивами. Если ни одно имя не указано или задана опция -p, выдается список имен переменных, доступных только для чтения. Опция -p вызывает выдачу результатов в формате, который можно использовать как входной. Статус выхода - 0, если только не передана недопустимая опция, одно из имен не является именем переменной или опция -f не указана перед именем, не являющимся именем функции. |
return [n] |
Вызывает завершение работы функции с указанным статусом выхода n. Если n не указано, возвращается статус выхода последней команды, выполненной в теле функции. При использовании вне функции, но в ходе выполнения сценария командой . (source), вызывает прекращение выполнения сценария и возврат либо значения n, либо статуса выхода последней команды сценария. При использовании вне функции и не при выполнении сценария командой ., возвращает 1. |
set [--abefhkmnptuvxBCHP] [-o опция] [аргумент ...] |
При вызове без опций выдает имя и значение всех переменных командного интерпретатора в виде, пригодном для повторного выполнения присваиваний. Результат отсортирован по именам в соответствии с текущей категорией локализации. Если опции указаны, они устанавливают или сбрасывают атрибуты командного интерпретатора. Все оставшиеся после обработки опций аргументы присваиваются последовательно в качестве значений позиционным параметрам $1, $2,... $n. Многие атрибуты имеют длинное наименование и могут быть заданы при помощи опции -o: |
-o имя_опции |
Имя_опции может быть следующем: |
allexport |
Автоматически помечать изменяемые или создаваемые переменные как экспортируемые в среду для последующих команд. (Аналогичная опция: -a) |
braceexpand |
Выполнять преобразование скобок (см. раздел "ПРЕОБРАЗОВАНИЯ" ранее). Эта опция установлена по умолчанию. (Аналогичная опция: -B) |
emacs |
Использовать интерфейс редактирования командной строки в стиле редактора emacs. Эта опция установлена по умолчанию в интерактивных командных интерпретаторах, если только они не запущены с опцией --noediting. |
errexit |
Немедленно завершать работу, если простая команда (см. раздел "СИНТАКСИС КОМАНД" ранее) завершает работу с ненулевым статусом выхода. Работа командного интерпретатора не завершается, если закончившаяся неудачно команда является частью цикла until или while, частью оператора if, частью списка && или ||, или если к статусу выхода команды применяется отрицание с помощью оператора !. (Аналогичная опция: -e) |
hashall |
Запоминать местонахождение команд, найденное при выполнении. Эта опция включена по умолчанию. (Аналогичная опция: -h) |
histexpand |
Включить подстановку из списка истории с помощью метасимвола !. Эта опция по умолчанию установлена в интерактивных командных интерпретаторах. (Аналогичная опция: -H) |
history |
Включить поддержку истории выполнения команд, как описано ранее в разделе "ИСТОРИЯ ВЫПОЛНЕНИЯ КОМАНД". Эта опция установлена по умолчанию для интерактивных командных интерпретаторов. |
ignoreeof |
Результат такой же, как и после выполнения команды IGNOREEOF=10 (см. секцию "Переменные командного интерпретатора" ранее). |
keyword |
Помещать в среду все аргументы в виде операторов присваивания, а не только предшествующие имени команды. (Аналогичная опция: -k) |
monitor |
Режим мониторинга. Управление заданиями включено. Эта опция стандартно устанавливается для интерактивных командных интерпретаторов в системах, где управление заданиями поддерживается (см. раздел "УПРАВЛЕНИЕ ЗАДАНИЯМИ" ранее). Фоновые процессы работают в отдельной группе процессов, и строка, содержащая их статус выхода, выдается при завершении их работы. (Аналогичная опция: -m) |
noclobber |
Если эта опция установлена, bash не переписывает существующий файл при перенаправлениях с помощью операторов >, >& и <>. Это поведение можно переопределить при создании выходных файлов, применяя оператор перенаправления >| вместо >. (Аналогичная опция: -C) |
noexec |
Читать команды, но не выполнять их. Эту опцию можно использовать для проверки наличия синтаксических ошибок в сценариях командного интерпретатора. Интерактивные командные интерпретаторы ее игнорируют. (Аналогичная опция: -n) |
noglob |
Отключить подстановку имен файлов. (Аналогичная опция: -f) |
notify |
Сообщать о состоянии прерванных фоновых заданий немедленно, а не перед выдачей следующего приглашения командной строки. Эта опция действует только если включено управление заданиями. (Аналогичная опция: -b) |
nounset |
При подстановке значений параметров рассматривать неустановленную переменную как ошибку. При попытке подстановки значения несуществующей переменной командный интерпретатор выдает сообщение об ошибке и, если он неинтерактивный, завершает работу с ненулевым статусом выхода. (Аналогичная опция: -u) |
onecmd |
Завершить после чтения и выполнения одной команды. (Аналогичная опция: -t) |
physical |
Если эта опция установлена, командный интерпретатор не следует по символическим связям при выполнении команд типа cd, изменяющих текущий рабочий каталог. Вместо этого, он использует физическую структуру каталогов. По умолчанию, bash следует по логической цепочке каталогов при выполнении команд, изменяющих текущий каталог. (Аналогичная опция: -P) |
posix |
Изменяет поведение bash на соответствующее стандарту POSIX 1003.2, там, где оно отличается (режим posix). |
privileged |
Включить привилегированный режим. В этом режиме файлы $ENV и $BASH_ENV не обрабатываются, функции командного интерпертатора не наследуются из среды, а переменная среды SHELLOPTS игнорируется. Если командный интерпретатор запущен с эффективным идентификатором пользователя (группы), не совпадающим с реальным, а опция -p не задана, выполняются перечисленные действия и эффективный идентификатор устанавливается равным реальному. Если опция -p задана при запуске, эффективный идентификатор не сбрасывается. Отключение данной опции приводит к установке эффективных идентификаторов пользователя и группы равными реальным. (Аналогичная опция: -p) |
verbose |
Выдавать строки команд по мере чтения. (Аналогичная опция: -v) |
vi |
Использовать интерфейс редактирования командной строки в стиле редактора vi. |
xtrace |
После преобразований в каждой простой команде выдавать значение переменной PS4, а затем - команду с результатами подстановок в аргументах. (Аналогичная опция -x) |
Если указана опция -o без имени_опции, выдаются значения текущих установленных опций. Если указана опция +o без имени_опции, в стандартный выходной поток выдается набор команд set, необходимый для воссоздания текущего набора опций. |
Остальные опции имеют следующие значения: |
-a |
То же, что и "allexport". |
-b |
То же, что и "notify". |
-e |
То же, что и "errexit". |
-f |
То же, что и "noglob". |
-h |
То же, что и "hashall". |
-k |
То же, что и "keyword". |
-m |
То же, что и "monitor". |
-n |
То же, что и "noexec". |
-p |
То же, что и "privileged". |
-t |
То же, что и "onecmd". |
-u |
То же, что и "nounset". |
-v |
То же, что и "verbose". |
-x |
То же, что и "xtrace". |
-B |
То же, что и "braceexpand". |
-C |
То же, что и "noclobber". |
-H |
То же, что и "histexpand". |
-P |
То же, что и "physical". |
-- |
Если после этой опции нет аргументов, сбрасываются значения аргументов командной строки. В противном случае, позиционные параметры устанавливаются в соответствии с указанными аргументами, даже если некоторые из них начинаются с дефиса (-). |
- |
Сигнализирует об окончании опций, так что все оставшиеся аргументы присваиваются позиционным параметрам (аргументам командной строки). Опции -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". |
no_empty_cmd_completion |
Если эта опция установлена и используется библиотека readline, bash не станет сканировать PATH для поиска возможных завершений командной строки, когда командная строка пуста. |
nocaseglob |
Если эта опция установлена, bash при подстановке имен файлов выполняет сопоставление с шаблоном без учета регистра символов (см. секцию "Подстановка имен файлов" ранее). |
nullglob |
Если эта опция установлена, bash подставляет пустую строку вместо шаблонов, которым не соответствует ни один файл (см. секцию "Подстановка имен файлов" ранее), а не сам шаблон. |
progcomp |
Если эта опция установлена, сервисы программируемого завершения строки включены (см. ранее "Программируемое завершение"). |
promptvars |
Если эта опция установлена, в строках приглашения выполняется подстановка значений переменных и параметров после стандартных преобразований, описанных в разделе "ПРИГЛАШЕНИЯ КОМАНДНОЙ СТРОКИ" ранее. Эта опция установлена по умолчанию. |
restricted_shell |
Командный интерпретатор устанавливает эту опцию, если он запущен в ограниченном режиме (см. раздел "ОГРАНИЧЕННЫЙ КОМАНДНЫЙ ИНТЕРПРЕТАТОР" ниже). Значение этой опции изменять нельзя. Она не сбрасывается при выполнении файлов начального запуска, что позволяет в этих файлах учесть, является ли командный интерпретатор ограниченным. |
shift_verbose |
Если эта опция установлена, встроенная команда shift выдает сообщение об ошибке, когда параметр сдвига превышает количество аргументов командной строки. |
sourcepath |
Если эта опция установлена, встроенная команда source (.) использует значение переменной PATH для поиска каталога, содержащего файл, переданный в качестве аргумента. Эта опция по умолчанию включена. |
xpg_echo |
Если эта опция установлена, встроенная команда echo по умолчанию интерпретирует управляющие последовательности с обратным слешем. |
suspend [-f] |
Приостанавливает работу текущего командного интерпретатора, пока он не получит сигнал SIGCONT. Опция -f отключает предупреждения, если эта команда выполняется в начальном командном интерпретаторе, - безусловно приостановить работу. Статус выхода - 0, если только командный интерпретатор не является начальным, а опция -f - не указана, или если управление заданиями отключено. |
test выражение |
[ выражение ] |
Возвращает статус 0 или 1, в зависимости от результатов проверки условного выражения. Каждый оператор или операнд должен быть отдельным аргументом. Выражения состоят из элементов, описанных ранее в разделе "УСЛОВНЫЕ ВЫРАЖЕНИЯ". |
Выражения можно комбинировать с помощью следующих операторов, перечисленных по убыванию приоритета. |
! выражение |
Истинно, если выражение ложно. |
( выражение ) |
Возвращает значение выражения. Можно использовать для переопределения обычного приоритета выполнения операторов. |
выражение1 -a выражение2 |
Истинно, если истинно и выражение1, и выражение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 dump). |
-d |
Максимальный размер сегмента данных процесса. |
-f |
Максимальный размер файлов, создаваемых командным интерпретатором. |
-l |
Максимальный размер сегмента, который может быть привязан (locked) к памяти. |
-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, FUNCNAME, GROUPS или DIRSTACK, эти переменные теряют специальные свойства, даже если они в дальнейшем снова устанавливаются. Статус выхода - 0, за исключеним случаев, когда имя не существует или доступно только для чтения. |
wait [n] |
Ждет завершения указанного процесса и возвращает статус его завершения. n может быть идентификатором процесса или спецификацией задания; если указана спецификация задания, ждет завершения всех процессов в конвейере соответствующего задания. Если n не указано, ожидается завершение всех текущих активных порожденных процессов, и возвращается статус ноль. Если n задает идентификатор несуществующего процесса или задания, статус выхода - 127. В противном случае, статусом выхода является статус завершения последнего процесса или задания, завершение которого ожидалось. |
ОГРАНИЧЕННЫЙ КОМАНДНЫЙ ИНТЕРПРЕТАТОР
Если bash запущен по имени rbash или с опцией -r при вызове, командный интерпретатор становится ограниченным. Ограниченный командный интерпретатор используется для создания более контролируемой стреды по сравнению с обычным интерпретатором. Он ведет себя аналогично bash, но следующие действия не разрешены или не выполняются: |
- |
изменение текущего каталога с помощью cd; |
- |
установка или сброс значений переменных SHELL, PATH, ENV или BASH_ENV; |
- |
указание / в именах команд; |
- |
указание имени файла, содержащего слеши, в качестве аргумента для встроенной команды . (source); |
- |
указание имени файла, содержащего слеши, в качестве аргумента для опции -p во встроенной команде hash; |
- |
импортирование определений функций из среды командного интерпретатора при запуске; |
- |
разбор значения переменной SHELLOPTS из среды командного интерпретатора при запуске; |
- |
перенаправление вывода с помощью операторов >, >|, <>, >&, &> и >>; |
- |
использование встроенной команды exec для замены командного интерпретатора другой командой; |
- |
добавление или удаление встроенных команд с помощью опций -f и -d встроенной команды enable; |
- |
указание опции -p для встроенной команды command; |
- |
отключение режима ограниченного командного интерпретатора с помощью опций set +r или set +o restricted. |
Эти ограничения применяются после чтения файлов начального запуска. |
При выполнении команды, которая оказалась сценарием командного интерпретатора (см. раздел "ВЫПОЛНЕНИЕ КОМАНД" ранее), rbash отключает любые ограничения в командном интерпретаторе, порожденном для выполнения сценария. |
СМОТРИ ТАКЖЕ
Bash Reference Manual, Brian Fox and Chet Ramey |
The Gnu Readline Library, Brian Fox and Chet Ramey |
The Gnu History Library, Brian Fox and Chet Ramey |
Portable Operating System Interface (POSIX) Part 2: Shell and Utilities, IEEE |
sh(1), ksh(1), csh(1) |
emacs(1), vi(1) |
readline(3) |
ФАЙЛЫ
/bin/bash |
Исполняемый файл bash. |
/etc/profile |
Общесистемный файл инициализации, выполняется начальными командными интерпретаторами. |
~/.bash_profile |
Личный файл инициализации, выполняется начальными командными интерпретаторами. |
~/.bashrc |
Отдельный файл начального запуска для интерактивных командных интерпретаторов. |
~/.bash_logout |
Отдельный файл очистки для начального командного интерпретатора, выполняемый при завершении его работы. |
~/.inputrc |
Отдельный файл инициализации библиотеки readline. |
АВТОРЫ
Брайан Фокс (Brian Fox), Free Software Foundation, bfox@gnu.org |
Чет Реми (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. |
Комментарии и сообщения об ошибках в переводе отправляйте по адресу avsdov@yahoo.com. |
ОСОБЕННОСТИ
Слишком большой и слишком медленный. |
Есть ряд небольших отличий между bash и традиционными версиями sh, в основном, связанные с поддержкой спецификации POSIX. |
Действие псевдонимов в некоторых случаях неочевидно. |
Встроенные команды и функции интерпретатора нельзя остановить/перезапустить. |
Составные команды и последовательности команд вида 'a ; b ; c' обрабатываются некорректно при попытке приостановки процесса. Когда процесс останавливается, командный интерпретатор немедленно выполняет следующую команду в последовательности. Как вариант, можно заключить последовательность команд в скобки, чтобы она выполнялась в отдельном интерпретаторе, это позволяет останавливать их как единое целое. |
Команды в операторе подстановки результатов выполнения команды $(...) не разбираются, пока не будет выполнена попытка подстановки. Это откладывает на определенное время выдачу сообщения об ошибке при вводе команды. |
Нельзя (пока) экспортировать массивы. |