table of contents
- НАИМЕНОВАНИЕ
- ОБЗОР
- АВТОРСКИЕ ПРАВА
- ОПИСАНИЕ
- ПАРАМЕТРЫ
- АРГУМЕНТЫ
- ВЫЗОВ
- ОПРЕДЕЛЕНИЯ
- ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА
- ГРАММАТИКА ОБОЛОЧКИ
- КОММЕНТАРИИ
- КАВЫЧКИ
- ПАРАМЕТРЫ
- РАСШИРЕНИЕ
- ПЕРЕНАПРАВЛЕНИЕ
- ПСЕВДОНИМЫ
- ФУНКЦИИ
- АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ
- УСЛОВНЫЕ ВЫРАЖЕНИЯ
- ПРОСТОЕ РАСШИРЕНИЕ КОМАНДЫ
- ВЫПОЛНЕНИЕ КОМАНДЫ
- ОКРУЖАЮЩАЯ СРЕДА ВЫПОЛНЕНИЯ КОМАНД
- СРЕДА ОКРУЖЕНИЯ
- КОД ЗАВЕРШЕНИЯ
- СИГНАЛЫ
- УПРАВЛЕНИЕ ЗАДАНИЯМИ
- ПОДСКАЗКИ
- БИБЛИОТЕКА READLINE
- ИСТОРИЯ
- РАСШИРЕНИЕ ИСТОРИИ
- ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ
- РЕЖИМ СОВМЕСТИМОСТИ ОБОЛОЧКИ
- ОГРАНИЧЕННАЯ ОБОЛОЧКА
- СМОТРИТЕ ТАКЖЕ
- ФАЙЛЫ
- АВТОРЫ
- СООБЩЕНИЯ ОБ ОШИБКАХ
- ОШИБКИ
- ПЕРЕВОД
- trixie-backports 4.29.1-1~bpo13+1
- testing 4.29.1-1
- unstable 4.29.1-1
| BASH(1) | General Commands Manual | BASH(1) |
НАИМЕНОВАНИЕ¶
bash - Оболочка GNU Bourne-Again
ОБЗОР¶
bash [options] [command_string | file]
АВТОРСКИЕ ПРАВА¶
Bash is Copyright (C) 1989-2022 by the Free Software Foundation, Inc.
ОПИСАНИЕ¶
Оболочка Bash это - совместимый интерпретатор командного языка, который выполняет команды, считываемые со стандартного ввода или из файла. Оболочка Bash также содержит полезные функции оболочек Korn и C (ksh и csh).
Оболочка Bash соответствует требованиям IEEE POSIX (стандарт IEEE 1003.1) и является реализацией этих требований, в части требований к оболочкам и утилитам. Оболочка Bash, по умолчанию, может быть настроена как совместимая с POSIX.
ПАРАМЕТРЫ¶
Все односимвольные опции оболочки, описанные в описании встроенной команды set, включая -o, могут использоваться в качестве опций при вызове оболочки. Кроме того, bash интерпретирует следующие опции при вызове:
- -c
- Если присутствует опция -c, то команды считываются из первого, не содержащего опции, аргумента командной строки command_string. Если после command_string есть аргументы, то первому аргументу присваивается значение $0, а значения остальных аргументов присваиваются позиционным параметрам. Присвоение значения $0 определяет название оболочки, которое используется в предупреждениях и сообщениях об ошибках.
- -i
- Если присутствует опция -i, то оболочка является интерактивной.
- -l
- Эта опция заставляет оболочку bash действовать так, как если бы это был вход в оболочку (смотрите раздел ВЫЗОВ ниже).
- -r
- Если присутствует опция -r, то оболочка становится restricted,т.е. ограниченной оболочкой (смотрите раздел ОГРАНИЧЕННАЯ ОБОЛОЧКА ниже).
- -s
- Если присутствует опция -s или если после обработки опции не осталось аргументов, то команды считываются со стандартного ввода. Эта опция позволяет устанавливать позиционные параметры при вызове интерактивной оболочки или при чтении входных данных из конвейера.
- -v
- Выводить строки ввода оболочки по мере их считывания.
- -x
- Команды и их аргументы выводятся по мере их выполнения.
- -D
- В стандартном выводе выводится список всех строк, заключенных в двойные кавычки, перед которыми стоит $. Это строки подлежат языковому переводу, если текущей локалью не является C или POSIX. Эта опция подразумевает опцию -n, т.е. никакие команды выполняться не будут.
- [-+]O [shopt_option]
- Опция shopt_option - это одна из опций оболочки, используемых встроенной командой shopt (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже). Если опция shopt_option присутствует, то -O устанавливает значение этой опции, а +O отменяет его. Если shopt_option не указана, то в стандартном выводе выводятся названия и значения опций оболочки, принимаемых shopt. Если опцией вызова является +O, то выходные данные отображаются в формате, который может быть повторно использован в качестве входных данных.
- --
- Опция -- сообщает об окончании опций и отключает дальнейшую обработку опций. Любые аргументы после -- рассматриваются как названия файлов и аргументов. Аргумент - эквивалентен --.
Оболочка Bash также интерпретирует ряд опций, состоящих из нескольких символов. Эти опции должны появиться в командной строке до того, как будут распознаны опции, состоящие из одного символа.
- --debugger
- Сделать так, чтобы профиль отладчика был выполнен до запуска оболочки. Включает расширенный режим отладки (смотрите описание опции extdebug для встроенной команды shopt ниже).
- --dump-po-strings
- Эквивалентно -D, но выходные данные представлены в формате файла GNU gettext po (переносимый объект).
- --dump-strings
- Эквивалентно -D.
- --help
- Вывести сообщение об использовании на стандартный вывод и завершить работу.
- --init-file file
- --rcfile file
- Выполнять команды из файла file вместо общесистемного файла инициализации /etc/bash.bashrc и стандартного файла персональной инициализации ~/.bashrc, если оболочка является интерактивной (смотрите раздел ВЫЗОВ ниже).
- --login
- Эквивалентно -l.
- --noediting
- Не использовать библиотеку GNU readline для чтения командных строк, когда оболочка является интерактивной.
- --noprofile
- Также не читать общесистемный файл запуска /etc/profile или любой из файлов инициализации ~/.bash_profile, ~/.bash_login или ~/.profile. По умолчанию bash считывает эти файлы при запуске оболочки (смотрите раздел ВЫЗОВ ниже).
- --norc
- Не считывать и не запускать общесистемный файл инициализации /etc/bash.bashrc и файл персональной инициализации ~/.bashrc, если оболочка является интерактивной. Эта опция включена по умолчанию, если оболочка вызывается как sh.
- --posix
- Изменить поведение bash, в котором операция по умолчанию отличается от стандарта POSIX, таким образом, чтобы она соответствовало стандарту POSIX (posix mode). Смотрите раздел СМОТРИТЕ ТАКЖЕ ниже для получения ссылки на документ, в котором подробно описано, как режим posix влияет на поведение bash.
- --restricted
- Оболочка становится ограниченной (смотрите раздел ОГРАНИЧЕННАЯ ОБОЛОЧКА ниже).
- --verbose
- Эквивалентно -v.
- --version
- Вывести сведения об этой версии оболочки bash на стандартный вывод и завершить работу.
АРГУМЕНТЫ¶
Если после обработки опции остаются аргументы и, ни опция -c, ни опция -s не были указаны, то предполагается, что первым аргументом является название файла, содержащего команды оболочки. Если bash вызывается таким образом, то $0 присваивается название файла, а позиционным параметрам присваиваются остальные аргументы. Bash считывает и выполняет команды из этого файла, а затем завершает работу. Статус завершения Bash - это статус завершения последней команды, выполненной в скрипте. Если команды не выполняются, то статус завершения равен 0. Сначала делается попытка открыть файл в текущем каталоге и, если файл не найден, то оболочка выполняет поиск скрипта в каталогах, указанных в переменной PATH.
ВЫЗОВ¶
Вход в оболочку (login shell) это - тот, у которого первым символом нулевого аргумента является - или тот, который начинается с опции --login.
Интерактивная оболочка (interactive) - это оболочка, которая запущена без дополнительных аргументов (если не определено -s) и без опции -c, а её стандартный ввод и стандартный вывод ошибок подключены к терминалам (как это определено в isatty(3) или один из них запущен с опцией -i. Оболочка является интерактивной, когда установлены значения PS1 и $-, включая i, позволяющие сценарию оболочки или запускающему файлу проверить это состояние.
В следующих разделах описывается, как bash выполняет свои файлы запуска. Если какой-либо из файлов существует, но не может быть прочитан, то bash сообщает об ошибке. Тильды в названиях файлов расширяются так, как это описано ниже в подразделе Расширение тильды раздела РАСШИРЕНИЕ.
Когда bash, при запуске, вызывается как интерактивная оболочка или как не интерактивная оболочка с опцией --login, то она сначала считывает и выполняет команды из файла /etc/profile, если этот файл существует. После прочтения этого файла она ищет файлы ~/.bash_profile, ~/.bash_login и ~/.profile, в указанном порядке и считывает и выполняет команды из первого, существующего и доступного для чтения, файла. Для предотвращения такого поведения при запуске оболочки может быть использована опция --noprofile.
Когда интерактивная оболочка завершает работу или не интерактивная оболочка выполняет встроенную команду exit, то bash считывает и выполняет команды из файла ~/.bash_logout, если он существует.
Когда запускается интерактивная оболочка, которая не является оболочкой входа, тогда bash считывает и выполняет команды из файлов /etc/bash.bashrc и ~/.bashrc, если эти файлы существуют. Это можно предотвратить, используя опцию --norc. Опция --rcfile file заставит bash считывать и выполнять команды из файла file вместо файлов /etc/bash.bashrc и ~/.bashrc.
Когда bash запускается неинтерактивно, например, для запуска сценария оболочки, она ищет переменную BASH_ENV в среде окружения, расширяет ее значение, если она там есть и использует расширенное значение в качестве названия файла для чтения и выполнения. Bash ведет себя так, как если бы была выполнена следующая команда:
но значение переменной 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 или демоном защищенной оболочки sshd. Если bash определяет, что она запускается таким образом в неинтерактивном режиме, то она считывает и выполняет команды из файлов /etc/bash.bashrc и ~/.bashrc, если эти файлы существуют и доступны для чтения. Она не будет этого делать, если вызывается как sh. Опция --norc может использоваться для предотвращения такого поведения, а опция --rcfile может использоваться для принудительного чтения другого файла, но ни rshd, ни sshd обычно не вызывают оболочку с этими опциями или не разрешают их определять.
Если оболочка запущена с эффективным идентификатором пользователя (группы), который не совпадает с реальным идентификатором пользователя (группы), и опция -p не указана, то файлы запуска не считываются, функции оболочки не наследуются из окружающей среды, а переменные SHELLOPTS, BASHOPTS, CDPATH и GLOBIGNORE, если они появляются в окружающей среде, игнорируются, также эффективный идентификатор пользователя устанавливается равным реальному идентификатору пользователя. Если при вызове указана опция -p, то поведение при запуске будет таким же, но эффективный идентификатор пользователя не будет сброшен.
ОПРЕДЕЛЕНИЯ¶
В остальной части этого документа используются следующие определения.
- blank
- Пробел или символ табуляции.
- word
- Последовательность символов, рассматриваемая оболочкой как единое целое. Также известная как токен token.
- name
- Слово word, состоящее только из буквенно-цифровых символов и знаков подчеркивания и начинающееся с буквенного символа или знака подчеркивания. Также именуемое как идентификатор identifier.
- metacharacter
- Метасимвол
metacharacter - символ,
который,
если он не
заключен в
кавычки,
разделяет
слова. Это
может быть
один из
следующих
символов:
| & ; ( ) < > space tab newline
- Оператор управления control operator
- Токен token, выполняющий функцию управления. Это один из следующих символов:
|| & && ; ;; ;& ;;& ( ) | |& <newline>
ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА¶
Зарезервированные слова Reserved words - это слова, которые имеют специальное значение для оболочки. Следующие слова распознаются как зарезервированные, если они не заключены в кавычки и являются либо первым словом команды (смотрите ниже раздел ГРАММАТИКА ОБОЛОЧКИ), либо третьим словом команды case или select (допустимо только in), либо третьим словом словом команды for (допустимы только in и do):
! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]
ГРАММАТИКА ОБОЛОЧКИ¶
В этом разделе описывается синтаксис различных форматов команд оболочки.
Simple Commands¶
Простая команда simple command - это последовательность необязательных переменных, за которыми следуют слова (разделенные пробелом blank) и перенаправления, которые завершаются управляющим оператором control operator. Первое слово определяет команду, которая должна быть выполнена. Это слово передается в качестве нулевого аргумента. Остальные слова передаются в качестве аргументов вызываемой команды.
Возвращаемое значение простой команды simple command - это статус её завершения или 128+n, если команда завершается по сигналу n.
Pipelines¶
Конвейер (канал) pipeline представляет собой последовательность из одной или нескольких команд, разделенных одним из управляющих операторов | или |&. Формат конвейера следующий:
[time [-p]] [ ! ] command1 [ [|⎪|&] command2 ... ]
Стандартный вывод command1 подключен по конвейеру к стандартному вводу command2. Это подключение выполняется перед любыми перенаправлениями, указанными в command1 (смотрите раздел ПЕРЕНАПРАВЛЕНИЕ ниже). Если используется |&, то вывод стандартных ошибок command1, в дополнение к ее стандартному выводу, подключается к стандартному вводу command2 через конвейер; это сокращение от 2>&1 I. Это неявное перенаправление стандартной ошибки на стандартный вывод выполняется после любых перенаправлений, указанных в command1.
Возвращаемый статус конвейера - это статус завершения последней команды, если только не включена опция pipefail. Если опция pipefail включена, то статус возврата конвейера равен значению последней (самой правой) команды, которая завершается с ненулевым статусом, или нулю, если все команды завершаются успешно. Если зарезервированное слово ! предшествует конвейеру, то статус завершения этого конвейера является логической инверсией статуса завершения, как описано выше. Оболочка ожидает завершения всех команд в конвейере, прежде чем возвращать значение.
Если зарезервированное слово time предшествует конвейеру, то по завершении конвейера отображается информация о прошедшем времени, а также о пользовательском и системном времени, затраченном на его выполнение. Опция -p изменяет формат вывода на указанный в POSIX. Когда оболочка находится в режиме posix posix mode, тогда она не распознает time как зарезервированное слово, если следующий токен начинается с `-'. Переменной TIMEFORMAT может быть присвоено значение строки, формат которой определяет, как должна отображаться информация о времени; смотрите описание TIMEFORMAT в подразделе Переменные оболочки ниже.
Когда оболочка находится в режиме posix mode, тогда за time может следовать новая строка. В этом случае оболочка отображает общее пользовательское и системное время, затраченное оболочкой и ее дочерними процессами. Переменная TIMEFORMAT может использоваться для указания формата информации о времени.
Каждая команда в конвейере с несколькими командами, выполняется в подоболочке subshell, которая является отдельным процессом. Описание подоболочек и среды окружения подоболочек приведено в разделе СРЕДА ВЫПОЛНЕНИЯ КОМАНД. Если опция lastpipe включена с помощью встроенной команды shopt (смотрите описание команды shopt ниже), последний элемент конвейера может быть запущен процессом оболочки, когда управление заданиями неактивно.
Списки¶
Список list - это последовательность из одного или нескольких конвейеров, разделенных одним из операторов ;, &, && или || и необязательно завершающихся одним из ;, & или <newline>.
В этом списке операторы && и || имеют одинаковый приоритет, а за ними следуют операторы ; и &, которые также имеют одинаковый приоритет.
Вместо точки с запятой для разделения команд в списке list может присутствовать последовательность из одной или нескольких новых строк.
Если команда завершается управляющим оператором &, то оболочка выполняет команду в фоновом режиме background в подоболочке. Оболочка не ожидает завершения команды и возвращаемый статус равен 0. Они называются асинхронными asynchronous командами. Команды, разделенные символом ;, выполняются последовательно; оболочка ожидает завершения выполнения каждой команды по очереди. Статус возврата - это статус завершения последней выполненной команды.
Списки И и ИЛИ представляют собой последовательности из одного или нескольких конвейеров, разделенных управляющими операторами && и ||, соответственно. Списки И и ИЛИ выполняются с левой ассоциативностью. Список И имеет вид
command1 && command2
command2 выполняется тогда и только тогда, когда command1 возвращает нулевой статус завершения (успех).
Список ИЛИ имеет вид
command1 || command2
Команда command2 выполняется тогда и только тогда, когда команда command1 возвращает ненулевой статус завершения. Возвращаемый статус списков И и ИЛИ - это статус завершения последней команды, выполненной в списке.
Compound Commands¶
Составная команда compound command - это одна из следующих команд. В большинстве случаев список list в описании команды может быть отделен от остальной части команды одной или несколькими символами новой строки, за которыми может следовать новая строка вместо точки с запятой.
- (list)
- Список list выполняется в подоболочке (описание окружающей среды подоболочки приведено в разделе СРЕДА ВЫПОЛНЕНИЯ КОМАНД ниже). Назначение переменных и встроенные команды, влияющие на окружающую среду команды, перестают действовать после завершения выполнения команды. Статус возврата - это статус выхода из списка list.
- { list; }
- Список list просто выполняется в текущей среде оболочки. Список list должен завершаться новой строкой или точкой с запятой. Это называется групповой командой group command. Возвращаемый статус - это статус завершения list. Обратите внимание, что в отличие от метасимволов ( и ), символы { и } являются зарезервированными словами reserved words и должны встречаться там, где разрешено распознавание зарезервированного слова. Поскольку они не приводят к разрыву слов, то они должны быть отделены от списка list пробелом или другим метасимволом оболочки.
- ((expression))
- Выражение expression вычисляется в соответствии с правилами, описанными ниже в разделе АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ. Если значение выражения не равно нулю, то возвращаемый статус равен 0; в противном случае статус возврата равен 1. Выражение expression расширяется так же, как если бы оно было заключено в двойные кавычки, но символы двойных кавычек в выражении expression не обрабатываются специальным образом и удаляются.
- [[ expression ]]
- Возвращает
статус 0
или 1 в
зависимости
от
вычисления
условного
выражения
expression.
Выражения
состоят из
основных
элементов,
описанных
ниже в
разделе
УСЛОВНЫЕ
ВЫРАЖЕНИЯ.
Слова
между [[ и ]]
не
подвергаются
разделению
на слова и
расширению
названия
пути.
Оболочка
выполняет
расширение
тильды,
расширение
параметров,
переменных,
арифметическое
расширение,
замену
команд,
замену
процессов
и удаление
кавычек
для этих
слов
(расширения,
которые
были бы
сделаны,
если бы
слова были
заключены
в двойные
кавычки).
Условные
операторы
типа -f,
должны
быть без
кавычек,
чтобы их
можно было
распознать
как
основные.
При использовании совместно с [[ операторы < и > выполняют лексикографическую сортировку с использованием текущей локали.
Смотрите описание встроенной команды test (в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ) при обработке параметров (т.е. отсутствующих параметров).
Когда используются операторы == и !=, тогда строка справа от оператора считается шаблоном и сопоставляется в соответствии с правилами, описанными ниже в подразделе Сопоставление с шаблоном, также как если бы была включена опция оболочки extglob. Оператор = эквивалентен оператору ==. Если включена опция оболочки nocasematch, то сопоставление выполняется без учета регистра буквенных символов. Возвращаемое значение равно 0, если строка соответствует (==) или не соответствует (!=) шаблону и 1 в противном случае. Любая часть шаблона может быть заключена в кавычки, чтобы обеспечить соответствие заключенной в кавычки части строки.
Доступен дополнительный двоичный оператор =~, имеющий тот же приоритет, что и == и !=. Когда он используется, то строка справа от оператора считается расширенным регулярным выражением POSIX и сопоставляется соответствующим образом (с использованием интерфейсов POSIX regcomp и regexec, обычно описываемых в regex(3)). Возвращаемое значение равно 0, если строка соответствует шаблону и 1 в противном случае. Если регулярное выражение синтаксически некорректно, то возвращаемое значение условного выражения равно 2. Если включена опция оболочки nocasematch, то сопоставление выполняется без учета регистра буквенных символов. Если какая-либо часть шаблона заключена в кавычки, то часть, заключенная в кавычки, сопоставляется буквально. Это означает, что каждый символ в части, заключенной в кавычки, соответствует сам себе, а не имеет какого-либо специального значения для сопоставления с шаблоном. Если шаблон хранится в переменной оболочки, то при расширении переменной, заключенной в кавычки, весь шаблон должен быть сопоставлен буквально. Внимательно относитесь к выражениям в квадратных скобках в регулярных выражениях, поскольку обычные кавычки и шаблонные символы теряют свое значение между квадратными скобками.
Шаблон будет соответствовать, если он соответствует какой-либо части строки. Закрепите шаблон с помощью операторов регулярных выражений ^ и $, чтобы он соответствовал всей строке. Переменная массива BASH_REMATCH записывает, какие части строки соответствуют шаблону. Элемент BASH_REMATCH с индексом 0 содержит часть строки, соответствующую всему регулярному выражению. Подстроки, соответствующие вложенным в скобки выражениям в регулярном выражении, сохраняются в остальных индексах BASH_REMATCH. Элемент BASH_REMATCH с индексом n- это часть строки, соответствующая n-му подвыражению, заключенному в круглые скобки. Bash устанавливает индекс BASH_REMATCH в глобальной области видимости; объявление его как локальной переменной приведет к неожиданным результатам.
Выражения могут быть объединены с помощью следующих операторов, перечисленных в порядке убывания приоритета:
- ( expression )
- Возвращает значение expression. Это может использоваться для переопределения обычного приоритета операторов.
- ! expression
- Истинно если expression ложно.
- expression1 && expression2
- Истинно, если оба expression1 и expression2 истинно.
- expression1 || expression2
- Истинно, если или expression1 или expression2 истинно.
Операторы && и || не вычисляют значение expression2, если значение expression1 достаточно для определения возвращаемого значения всего условного выражения.
- for name [ [ in [ word ... ] ] ; ] do list ; done
- Список слов, следующих за in, расширяется, образуя список элементов. Переменная name присваивается каждому элементу этого списка по очереди и list выполняется каждый раз. Если in word не указаны, то команда for выполняет list один раз для каждого установленного позиционного параметра (смотрите раздел ПАРАМЕТРЫ ниже). Статус возврата - это статус завершения последней выполненной команды. Если при расширении списка элементов, следующих за in, список пуст, то команды не выполняются, а статус возврата равен 0.
- for (( expr1 ; expr2 ; expr3 )) ; do list ; done
- Сначала вычисляется арифметическое выражение expr1 в соответствии с правилами, описанными ниже в разделе АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ. Затем арифметическое выражение expr2 вычисляется повторно до тех пор, пока оно не станет равным нулю. Каждый раз, когда значение expr2 принимает ненулевое значение, выполняется list и вычисляется арифметическое выражение expr3. Если какое-либо выражение не указано, то это означает, что его значение равно 1. Возвращаемое значение - это статус завершения последней выполненной команды в list или значение false, если какое-либо из выражений неверно.
- select name [ in word ] ; do list ; done
- Список слов, следующих за in, расширяется, образуя список элементов, а набор расширенных слов выводится на стандартный вывод ошибок, где каждому слову предшествует номер. Если параметр in word не указан, то выводятся позиционные параметры (смотрите ПАРАМЕТРЫ ниже). Затем отображается запрос PS3 и считывается строка со стандартного ввода. Если строка состоит из числа, соответствующего одному из отображаемых слов, то этому слову присваивается значение name. Если строка пуста, то слова и приглашение отображаются снова. Если EOF считан, то команда select завершает выполнение и возвращает значение 1. При любом другом считывании значения name будет установлено значение ноль. Прочитанная строка сохраняется в переменной REPLY. Команда list выполняется после каждого выбора, пока не будет выполнена команда break. Статус завершения команды select - это статус завершения последней команды, выполненной в list, или ноль, если ни одна команда не была выполнена.
- case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
- Команда case сначала разворачивает слово word и пытается сопоставить его с каждым шаблоном pattern по очереди, используя правила сопоставления, описанные в разделе Сопоставление с шаблоном ниже. Поле word расширяется с помощью тильды, параметров и переменных, арифметического расширения, подстановки команд, подстановки процессов и удаления кавычек. Каждый шаблон pattern расширяется с помощью тильды, параметров и переменных, арифметического расширения, подстановки команд, подстановки процессов и удаления кавычек. Если включена опция оболочки nocasematch, то сопоставление выполняется без учета регистра буквенных символов. При обнаружении совпадения выполняется соответствующая операция list. Если используется оператор ;;, то после первого совпадения с шаблоном последующие попытки сопоставления не предпринимаются. Использование ;& вместо ;; приводит к продолжению выполнения с list, связанным со следующим набором шаблонов. Использование ;;& вместо ;; приводит к тому, что оболочка проверяет следующий список шаблонов в команде, если таковой имеется, и выполняет всё связанное с list при успешном совпадении, продолжая выполнение команды case, как если бы список шаблонов не совпадал. Статус выхода равен нулю, если ни один шаблон не совпадает. В противном случае это статус завершения последней команды, выполненной в list.
- if list; then list; [ elif list; then list; ] ... [ else list; ] fi
- Выполняется if list. Если ее статус завершения равен нулю, то выполняется then list. В противном случае каждый elif list выполняется по очереди, и если его статус завершения равен нулю, то выполняется then list и команда завершается. В противном случае выполняется else list, если это присутствует. Статус завершения - это статус завершения последней выполненной команды или ноль, если ни одно из условий не является истинным.
- while list-1; do list-2; done
- until list-1; do list-2; done
- Команда while непрерывно выполняет список list-2 до тех пор, пока последняя команда в списке list-1 не вернет нулевой статус завершения. Команда until идентична команде while, за исключением того, что проверка отменяется: list-2 выполняется до тех пор, пока последняя команда в list-1 не вернет ненулевой статус завершения. Статус завершения команд while и until - это статус завершения последней команды, выполненной в list-2, или ноль, если ни одна из них не была выполнена.
Coprocesses¶
Сопроцесс coprocess - это команда оболочки, перед которой стоит зарезервированное слово coproc. Сопроцесс выполняется асинхронно в подоболочке, как если бы команда была завершена с помощью управляющего оператора &, при этом между исполняющей оболочкой и сопроцессом устанавливается двусторонняя связь.
Синтаксис для сопроцесса следующий:
coproc [NAME] command [redirections]
При этом создается сопроцесс с названием NAME. Команда command может быть как простой, так и составной командой (смотрите выше). NAME - это наименование переменной оболочки. Если NAME не указано, то по умолчанию используется наименование COPROC.
Рекомендуемая форма для использования в сопроцессе - это
coproc NAME { command [redirections]; }
Этот формат рекомендуется, потому что простые команды приводят к тому, что сопроцесс всегда называется COPROC и она проще в использовании и более полная, чем другие составные команды.
Если command является составной командой, то NAME является необязательным. Слово, следующее за coproc, определяет, интерпретируется ли это слово как название переменной: оно интерпретируется как NAME, если это не зарезервированное слово, которое вводит составную команду. Если command является простой командой, то NAME не допускается; это делается для того, чтобы избежать путаницы между NAME и первым словом простой команды.
Когда выполняется сопроцесс, оболочка создает переменную массива (смотрите подраздел Массивы ниже) с названием NAME в контексте исполняющей оболочкой. Стандартный вывод command подключается по конвейеру к файловому дескриптору в исполняющей оболочке, и этому файловому дескриптору присваивается значение NAME[0]. Стандартный ввод command подключается по конвейеру к файловому дескриптору в исполняющей оболочке, и этот файловый дескриптор присваивается NAME[1]. Этот конвейер устанавливается перед любыми перенаправлениями, указанными командой (смотрите раздел ПЕРЕНАПРАВЛЕНИЕ ниже). Файловые дескрипторы могут использоваться в качестве аргументов для команд оболочки и перенаправлений с использованием стандартных расширений слов. Файловые дескрипторы, кроме тех, которые созданы для выполнения команд и обработки подстановок, недоступны в подоболочках.
Идентификатор процесса оболочки, созданной для выполнения сопроцесса, доступен в виде значения переменной NAME_PID. Встроенная команда wait может использоваться для ожидания завершения сопроцесса.
Поскольку сопроцесс создается как асинхронная команда, то команда coproc всегда возвращает результат успешно. Возвращаемый статус сопроцесса - это статус завершения command.
Определения функций оболочки¶
Функция оболочки - это объект, который вызывается как простая команда и выполняет сложную команду с новым набором позиционных параметров. Функции оболочки объявляются следующим образом:
- fname () compound-command [redirection]
- function fname [()] compound-command [redirection]
- Это определяет функцию с названием fname. Зарезервированное слово function необязательно. Если указано зарезервированное слово function, то скобки необязательны. Функция body - это составная команда (смотрите подраздел Составные команды выше). Эта команда обычно представляет собой список команд list между { and }, но может быть любой командой, указанной в подразделе "Составные команды" выше. Если используется зарезервированное слово function, но скобки не указаны, то рекомендуется использовать фигурные скобки. Составная команда выполняется всякий раз, когда указано fname в качестве названия простой команды. В режиме posix mode, fname должно быть допустимым названием оболочки name и может не совпадать с названием одной из команд POSIX special builtins. В режиме по умолчанию названием функции может быть любое командное слово без кавычек, не содержащее $. Любые перенаправления (смотрите раздел ПЕРЕНАПРАВЛЕНИЕ ниже), указанные при определении функции, выполняются при ее выполнении. Статус завершения указанной функции равен нулю, если только не возникает синтаксическая ошибка или функция с таким же названием и доступная только для чтения, уже не существует. При выполнении статус завершения функции равен статусу завершения последней команды, выполненной в теле функции. Смотрите раздел ФУНКЦИИ ниже.
КОММЕНТАРИИ¶
В неинтерактивной оболочке или в интерактивной оболочке, в которой включена опция interactive_comments для встроенной команды shopt (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже), если слово начинается с # ,то это означает, что это слово и все остальные команды и символы в этой строке следует игнорировать. В интерактивной оболочке, в которой не включена опция interactive_comments, комментарии не разрешены. Опция interactive_comments, по умолчанию, включена в интерактивных оболочках.
КАВЫЧКИ¶
Кавычки Quoting используется для удаления специального значения определенных символов или слов из командной строки. Кавычки могут использоваться для отключения специальной обработки специальных символов, для предотвращения распознавания зарезервированных слов как таковых и для предотвращения расширения параметров.
Каждый из метасимволов metacharacters, перечисленных выше в разделе ОПРЕДЕЛЕНИЯ, имеет особое значение для оболочки и должен быть заключен в кавычки, если он должен только представлять сам себя.
Когда используются средства расширения истории команд (смотрите раздел РАСШИРЕНИЕ ИСТОРИИ ниже), тогда символ, (обычно !) для предотвращения расширения истории history expansion, должен быть заключен в кавычки.
Существует три механизма заключения в кавычки: экранирующий символ escape character, одинарные кавычки и двойные кавычки.
Обратная косая черта без кавычек (\) - это escape character. Она сохраняет буквальное значение следующего за ней символа, за исключением <newline>. Если появляется пара \<newline>, а обратная косая черта сама по себе не заключена в кавычки, то \<newline> рассматривается как продолжение строки (то есть удаляется из входного потока и фактически игнорируется).
При заключении символов в одинарные кавычки сохраняется буквальное значение каждого символа внутри кавычек. Одинарная кавычка может не заключаться в одинарные кавычки, даже если перед ней стоит обратная косая черта.
При заключении символов в двойные кавычки сохраняется буквальное значение всех символов в кавычках, за исключением $, `, \ и, если включено расширение истории, !. Когда оболочка находится в режиме posix, тогда символ ! не имеет специального значения в двойных кавычках, даже если включено расширение истории. Символы $ и ` сохраняют свое специальное значение в двойных кавычках. Обратная косая черта сохраняет свое специальное значение только в том случае, если за ней следует один из следующих символов: $, `, ", \ или <newline>. Двойная кавычка может быть заключена в двойные кавычки, если перед ней поставить обратную косую черту. Если это так, то будет выполнено расширение истории, если только символ !, заключенный в двойные кавычки, не будет экранирован с помощью обратной косой черты. Обратная косая черта, предшествующая !, не удаляется.
Специальные параметры * и @ имеют специальное значение, когда они заключены в двойные кавычки (смотрите раздел ПАРАМЕТРЫ ниже).
Последовательности символов вида $'string' рассматриваются как специальный вариант одинарных кавычек. Последовательность расширяется до строки string, при этом символы, экранированные обратной косой чертой, в string заменяются в соответствии со стандартом ANSI С. Управляющие последовательности с обратной косой чертой, если они присутствуют, то декодируются следующим образом:
- \a
- сигнал тревоги (сирена)
- \b
- возврат на один символ
- \e
- \E
- экранирующий символ
- \f
- новая страница
- \n
- новая строка
- \r
- возврат каретки
- \t
- горизонтальная табуляция
- \v
- вертикальная табуляция
- \\
- обратная косая черта
- \'
- одиночная кавычка
- \"
- двойная кавычка
- \?
- вопросительный знак
- \nnn
- восьмиразрядный символ, значением которого является восьмеричное значение nnn (от одной до трех восьмеричных цифр)
- \xHH
- восьмибитный символ, значением которого является шестнадцатеричное значение HH (одна или две шестнадцатеричные цифры)
- \uHHHH
- символ Юникода (ISO/IEC 10646), значением которого является шестнадцатеричное значение HHHH (от одной до четырех шестнадцатеричных цифр).
- \UHHHHHHHH
- символ Юникода (ISO/IEC 10646), значением которого является шестнадцатеричное значение HHHHHHHH (от одной до восьми шестнадцатеричных цифр)
- \cx
- управляющий символ-x
Расширенный результат заключен в одинарные кавычки, как если бы знак доллара отсутствовал.
Строка, заключенная в двойные кавычки, перед которой стоит знак доллара ($"string"), приведет к переводу строки в соответствии с текущей локалью. Инфраструктура gettext выполняет поиск и преобразование, используя переменные оболочки LC_MESSAGES, TEXTDOMAINDIR и TEXTDOMAIN. Если текущей локалью является C или POSIX, и если нет доступных переводов или если строка не переведена, то знак доллара игнорируется. Это формат двойных кавычек, поэтому строка по умолчанию остается заключенной в двойные кавычки независимо от того, переведена она и заменена или нет. Если опция noexpand_translation включена с помощью встроенной команды shopt, то переведенные строки заключаются в одинарные, а не в двойные кавычки. Смотрите описание shopt ниже в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ.
ПАРАМЕТРЫ¶
Параметр parameter - это объект, в котором хранятся значения. Это может быть название name, число или один из специальных символов, перечисленных ниже в подразделе Специальные параметры. Переменная variable- это параметр, указанный в name. Переменная имеет значение value и не имеет совсем атрибутов или имеет несколько атрибутов attributes. Атрибуты присваиваются с помощью встроенной команды declare (смотрите подраздел Объявление ниже в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ).
Параметр считается установленным, если ему было присвоено значение. Строка ноль является допустимым значением. После того, как переменная установлена, ее можно отменить только с помощью встроенной команды unset (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).
Переменная variable может быть присвоена с помощью выражения вида
name=[value]
Если значение value не указано, то переменной присваивается нулевая строка. Все values расширяются тильдой, параметрами и переменными, заменой команд, арифметическим расширением и удалением кавычек (смотрите раздел РАСШИРЕНИЕ ниже). Если для переменной задан атрибут целое число integer, то value вычисляется как арифметическое выражение, даже если расширение $((...)) не используется (смотрите подраздел Арифметическое расширение ниже). Разделение слов и расширение названия пути не выполняются. Операторы присваивания также могут использоваться в качестве аргументов для команд alias, declare, typeset, export, readonly и local при выполнении встроенных команд declaration. В режиме posix mode эти встроенные составляющие могут появляться в команде после одной или нескольких экземпляров встроенной команды command и сохранять эти свойства выражения присваивания.
В контексте, когда оператор присваивания присваивает значение переменной оболочки или индексу массива, оператор += может использоваться для добавления к предыдущему значению переменной. Это включает аргументы для встроенных команд, таких как declare, которые принимают команды присваивания (команды declare). Когда оператор += применяется к переменной, для которой задан атрибут integer, то значение value вычисляется как арифметическое выражение и добавляется к текущему значению переменной, которое также вычисляется. Когда оператор += применяется к переменной массива с помощью составного присваивания (смотрите подраздел Массивы ниже), то значение переменной не отменяется (как это происходит при использовании =), а к массиву добавляются новые значения, начиная с значения, на единицу превышающего максимальный индекс массива (для индексированных массивов). или добавляются в качестве дополнительных пары ключ-значение в ассоциативном массиве. При применении к переменной, имеющей строковое значение, значение value расширяется и добавляется к значению переменной.
Переменной можно присвоить атрибут nameref, используя опцию -n для встроенных команд declare или local (смотрите описания declare и local ниже), чтобы создать nameref или ссылку на еще одну переменную. Это позволяет косвенно манипулировать переменными. Всякий раз, когда ссылаются на переменную nameref, то ей присваивают значение, сбрасывают значение или изменяют ее атрибуты (кроме использования или изменения самого атрибута nameref), операция фактически выполняется над переменной, указанной значением переменной nameref. Переменная nameref обычно используется в функциях оболочки для ссылки на переменную, название которой передается в качестве аргумента функции. Например, если название переменной передается в функцию оболочки в качестве первого аргумента, то командой
внутри функции создается атрибут nameref переменной ref, со значением которое является названием переменной, передаваемым в качестве первого аргумента. Ссылки и присвоение переменной ref, а также изменения ее атрибутов рассматриваются как ссылки, присвоения и модификации атрибутов переменной, название которой было передано как $1. Если управляющая переменная в цикле for имеет атрибут nameref, то список слов может быть списком переменных оболочки, и при выполнении цикла для каждого слова в списке, в свою очередь, будет установлена ссылка на название. Переменным массива не может быть присвоен атрибут nameref. Однако переменные nameref могут ссылаться на переменные массива и на переменные массива с индексом. Переменные nameref можно отменить, используя опцию -n для встроенной команды unset. В противном случае, если unset выполняется с названием переменной nameref в качестве аргумента, то переменная, на которую ссылается переменная nameref, будет отключена.
Позиционные параметры¶
Позиционный параметр positional parameter - это параметр, обозначаемый одной или несколькими цифрами, отличными от цифры 0. Позиционные параметры назначаются из аргументов командной строки при ее вызове и могут быть переназначены с помощью встроенной команды set. Позиционные параметры не могут быть назначены с помощью команды присваивания. Позиционные параметры временно заменяются при выполнении функции оболочки (смотрите раздел ФУНКЦИИ ниже).
Если позиционный параметр, состоящий более чем из одной цифры, расширяется, то он должен быть заключен в фигурные скобки (смотрите раздел РАСШИРЕНИЕ ниже).
Специальные параметры¶
Специальные параметры - это несколько параметров, которые оболочка обрабатывает особым образом. На эти параметры можно только ссылаться; присвоение им значений запрещено.
- *
- Расширяется до позиционных параметров, начиная с единицы. Если расширение не заключено в двойные кавычки, то каждый позиционный параметр расширяется до отдельного слова. В контекстах, где это выполняется, эти слова подлежат дальнейшему разбиению на слова и расширению названия пути. Когда расширение происходит в двойных кавычках, оно расширяется до одного слова со значением каждого параметра, разделенного первым символом специальной переменной IFS. То есть, "$*" эквивалентно "$1c$2c...", где "c" является первым символом значения переменной IFS. Если значение IFS не задано, то параметры разделяются пробелами. Если значение IFS равно нолю, то параметры объединяются без промежуточных разделителей.
- @
- Расширяется до позиционных параметров, начиная с единицы. В контекстах, где выполняется разбиение слов, каждый позиционный параметр расширяется до отдельного слова; если эти слова не заключены в двойные кавычки, они могут быть разбиты на слова. В контекстах, где разделение слов не выполняется, оно расширяется до одного слова, при этом каждый позиционный параметр разделяется пробелом. Когда расширение происходит в двойных кавычках, тогда каждый параметр расширяется до отдельного слова. То есть "$@" эквивалентно "$1" "$2" ... Если расширение в двойных кавычках происходит внутри слова, расширение первого параметра соединяется с начальной частью исходного слова, а расширение последнего параметра соединяется с последней частью исходного слова. Когда позиционных параметров нет, то "$@" и $@ расширяются до нуля (т.е. удаляются).
- #
- Расширяется до количества позиционных параметров в десятичной системе счисления.
- ?
- Расширяется до состояния завершения самого последнего выполненного конвейера в интерактивном режиме.
- -
- Расширяется до флагов текущей опции, указанных при вызове, с помощью встроенной команды set или с помощью самой оболочки (например, опции -i).
- $
- Расширяется до идентификатора процесса оболочки. В подоболочке этот параметр расширяется до идентификатора процесса текущей оболочки, а не подоболочки.
- !
- Расширяется до идентификатора процесса задания, которое последним было переведено в фоновый режим, независимо от того, выполняется ли оно как асинхронная команда или с использованием встроенной команды bg (смотрите раздел УПРАВЛЕНИЕ ЗАДАНИЕМ ниже).
- 0
- Расширяется до названия оболочки или сценария оболочки. Это значение задается при инициализации оболочки. Если bash вызывается из файла команд, то $0 присваивается название этого файла. Если bash запускается с опцией -c, то $0 присваивается значение первого аргумента после строки, которая должна быть выполнена, если таковой присутствует. В противном случае ему присваивается значение названия файла, используемого для вызова bash, как указано в нулевом аргументе.
Переменные оболочки¶
Оболочка устанавливает следующие переменные:
- _
- При запуске оболочки задать значение пути, используемого для вызова оболочки или сценария оболочки, как указано в списке переменных окружения или аргументов. Затем, после расширения, расширить до последнего аргумента предыдущую простую команду, выполненную интерактивно. Также задать значение полного пути, используемого для вызова каждой команды, которая выполняется и помещается в окружающую среду, экспортируемую для этой команды. При проверке почты этот параметр содержит название проверяемого почтового файла.
- BASH
- Расширяется до полного названия файла, используемого для вызова этого экземпляра bash.
- BASHOPTS
- Список включенных опций оболочки, разделенных двоеточием. Каждое слово в списке является допустимым аргументом опции -s для встроенной команды shopt (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже). Опции, отображаемые в переменной BASHOPTS, указаны как on в shopt. Если эта переменная присутствует в окружающей среде при запуске bash, то каждая опция оболочки в списке будет включена перед чтением любых файлов запуска. Эта переменная доступна только для чтения.
- BASHPID
- Расширяется до идентификатора текущего процесса bash. Этим отличается от $$ при определенных обстоятельствах, например, для подоболочек, которые не требуют повторной инициализации bash. Присвоение BASHPID не имеет никакого эффекта. Если значение BASHPID не задано, то оно теряет свои специальные свойства, даже если впоследствии оно будет сброшено.
- BASH_ALIASES
- Переменная ассоциативного массива, элементы которой соответствуют внутреннему списку псевдонимов, поддерживаемому встроенной командой alias. Элементы, добавленные в этот массив, отображаются в списке псевдонимов; однако сброс настроек элементов массива в настоящее время не приводит к удалению псевдонимов из списка псевдонимов. Если значение BASH_ALIASES не задано, то оно теряет свои специальные свойства, даже если впоследствии оно будет сброшено.
- BASH_ARGC
- Переменная массива, значения которой представляют собой количество параметров в каждом фрейме текущего стека вызовов для выполнения bash. Количество параметров текущей подпрограммы (функции оболочки или сценария, выполняемого с помощью . или source) находится в верхней части стека. Когда выполняется подпрограмма, количество переданных параметров записывается в переменную BASH_ARGC. Оболочка устанавливает значение переменной BASH_ARGC только в режиме расширенной отладки (смотрите описание опции extdebug для встроенной команды shopt ниже). Установка опции extdebug после того, как оболочка начала выполнять сценарий, или обращение к этой переменной, когда значение extdebug не задано, может привести к несогласованным значениям.
- BASH_ARGV
- Переменная массива, содержащая все параметры текущего стека вызовов для выполнения bash. Конечный параметр последнего вызова подпрограммы находится в верхней части стека; первый параметр начального вызова находится в нижней части стека. Когда выполняется подпрограмма, указанные параметры помещаются в переменную BASH_ARGV. Оболочка устанавливает значение BASH_ARGV только в режиме расширенной отладки (смотрите описание опции extdebug для встроенной команды shopt ниже). Установка extdebug после того, как оболочка начала выполнять сценарий, или обращение к этой переменной, когда значение extdebug не задано, может привести к несогласованным значениям.
- BASH_ARGV0
- При обращении к этой переменной она расширяется до названия оболочки или сценария оболочки (аналогично $0; смотрите описание специального параметра 0 выше). Присвоение значения переменной BASH_ARGV0 приводит к тому, что присвоенное значение также будет присвоено $0. Если значение BASH_ARGV0 не задано, то она теряет свои специальные свойства, даже если впоследствии она будет сброшена.
- BASH_CMDS
- Переменная ассоциативного массива, элементы которой соответствуют внутренней хэш-таблице команд, поддерживаемой встроенной командой hash. Элементы, добавленные в этот массив, отображаются в хэш-таблице; однако удаление элементов массива в настоящее время не приводит к удалению названий команд из хэш-таблицы. Если значение BASH_CMDS не задано, оно теряет свои специальные свойства, даже если впоследствии оно будет сброшено.
- BASH_COMMAND
- Команда, выполняемая в данный момент или готовящаяся к выполнению, если только оболочка не выполняет команду в результате перехвата, и в этом случае это будет команда, выполняющаяся во время перехвата. Если значение BASH_COMMAND не задано, оно теряет свои специальные свойства, даже если впоследствии будет сброшено.
- BASH_EXECUTION_STRING
- Аргумент команды для опции вызова -c.
- BASH_LINENO
- Переменная массива, элементами которой являются номера строк в исходных файлах, в которых был вызван каждый соответствующий элемент FUNCNAME. ${BASH_LINENO[$i]} - это номер строки в исходном файле (${BASH_SOURCE[$i+1]}), где ${FUNCNAME[$i]} был вызван (или ${BASH_LINENO[$i-1]}, если на него ссылаются в другой функции оболочки). Используйте LINENO, чтобы получить текущий номер строки.
- BASH_LOADABLES_PATH
- Разделенный двоеточием список каталогов, в которых оболочка ищет динамически загружаемые встроенные команды, указанные командой enable.
- BASH_REMATCH
- Переменная массива, элементы которой присваиваются двоичным оператором =~ условной команде =~. Элемент с индексом 0 - это часть строки, соответствующая всему регулярному выражению. Элемент с индексом n - это часть строки, соответствующая n-му подвыражению, заключенному в круглые скобки.
- BASH_SOURCE
- Переменная массива, элементами которой являются наименования исходных файлов, в которых определены соответствующие наименования функций оболочки в переменной массива FUNCNAME. Функция оболочки ${FUNCNAME[$i]} определена в файле ${BASH_SOURCE[$i+1]} и вызывается из ${BASH_SOURCE[$i+1]}.
- BASH_SUBSHELL
- Инкремент на +1 в каждой подоболочке или окружающей среде подоболочек, когда оболочка начинает выполняться в этой окружающей среде. Начальное значение равно 0. Если значение BASH_SUBSHELL не задано, то оно теряет свои специальные свойства, даже если впоследствии оно будет сброшено.
- BASH_VERSINFO
- Переменная массива, доступная только для чтения, элементы которой содержат информацию о версии для данного экземпляра bash. Элементам массива присваиваются следующие значения:
- BASH_VERSINFO[0]
- Старший номер версии (the release).
- BASH_VERSINFO[1]
- Младший номер версии (the version).
- BASH_VERSINFO[2]
- Уровень исправления.
- BASH_VERSINFO[3]
- Версия сборки.
- BASH_VERSINFO[4]
- Статус выпуска (например, beta1).
- BASH_VERSINFO[5]
- Значение MACHTYPE.
- BASH_VERSION
- Расширяется до строки, описывающей версию этого экземпляра bash.
- COMP_CWORD
- Индекс слова в ${COMP_WORDS}, содержащего текущее положение курсора. Эта переменная доступна только в функциях оболочки, вызываемых средствами завершения программы (смотрите подраздел Завершение программы ниже).
- COMP_KEY
- Клавиша (или последняя клавиша в последовательности клавиш), используемая для вызова текущей функции завершения.
- COMP_LINE
- Текущая командная строка. Эта переменная доступна только в функциях оболочки и внешних командах, вызываемых средствами завершения программы (смотрите подраздел Завершение программы ниже).
- COMP_POINT
- Индекс текущей позиции курсора относительно начала текущей команды. Если текущая позиция курсора находится в конце текущей команды, то значение этой переменной равно ${#COMP_LINE}. Эта переменная доступна только в функциях оболочки и внешних командах, вызываемых средствами завершения программ (смотрите подраздел Завершение программы ниже).
- COMP_TYPE
- Устанавливается целое значение, соответствующее типу попытки завершения, вызвавшей вызов функции завершения: TAB для обычного завершения, ?, для перечисления завершений после последовательных табуляций, %, для перечисления альтернатив при частичном завершении слова, @, вывод списка завершений, если слово не изменено, или % для завершения меню. Эта переменная доступна только в функциях оболочки и внешних командах, вызываемых средствами программируемого завершения (смотрите подраздел Завершение программ ниже).
- COMP_WORDBREAKS
- Набор символов, которые библиотека readline обрабатывает как разделители слов при выполнении завершения слова. Если значение COMP_WORDBREAKS не задано, то оно теряет свои специальные свойства, даже если впоследствии оно будет сброшено.
- COMP_WORDS
- Переменная типа массива (смотрите Массивы ниже), состоящая из отдельных слов в текущей командной строке. Строка разбивается на слова так, как ее разбила бы readline, используя COMP_WORDBREAKS, как описано выше. Эта переменная доступна только в функциях оболочки, вызываемых средствами программируемого завершения (см. подраздел Завершение программ ниже).
- COPROC
- Переменная массива (смотрите подраздел Массивы ниже), созданная для хранения дескрипторов файлов для вывода и ввода в не именованный сопроцесс (смотрите подраздел Сопроцессы выше).
- DIRSTACK
- Переменная массива (смотрите подраздел "Массивы" ниже), содержащая текущее содержимое стека каталогов. Каталоги появляются в стеке в порядке, указанном встроенной командой dirs. Назначение членам этой переменной массива может использоваться для изменения каталогов, уже находящихся в стеке, но для добавления и удаления каталогов необходимо использовать встроенные команды pushd и popd. Назначение этой переменной не изменит текущий каталог. Если DIRSTACK не задано, то она теряет свои специальные свойства, даже если впоследствии сбрасывается.
- EPOCHREALTIME
- Каждый раз, когда ссылаются на этот параметр, он расширяется до количества секунд с момента начала эпохи Unix (смотрите time(3)) в качестве значения с плавающей точкой с микросекундной дискретностью. Установка EPOCHREALTIME игнорируются. Если EPOCHREALTIME не установлен, то он теряет свои специальные свойства, даже если впоследствии он будет сброшен.
- EPOCHSECONDS
- Каждый раз, когда этот параметр ссылается, он расширяется до количества секунд с момента начала эпохи Unix (смотрите time(3)). Установка EPOCHSECONDS игнорируется. Если EPOCHSECONDS не задан, то он теряет свои специальные свойства, даже если впоследствии будет сброшен.
- EUID
- Расширяется до эффективного пользовательского идентификатора для текущего пользователя, инициализированного при запуске оболочки. Эта переменная доступна только для чтения.
- FUNCNAME
- Переменная
массива,
содержащая
названия
всех
функций
оболочки, в
настоящее
время в
стеке
вызовов
выполнения.Элемент
с индексом
0-это
название
любой в
настоящее
время
выполняющейся
функцию
оболочки.Самый
нижний
элемент
(тот,
который с
самым
большим
индексом)
"main". Эта
переменная
существует
только при
выполнении
функции
оболочки.
Установка
FUNCNAME не
действует.Если
FUNCNAME не
установлена,
то она
теряет
свои
специальные
свойства,
даже если
впоследствии
будет
сброшена.
Эта переменная может использоваться с BASH_LINENO и BASH_SOURCE. Каждому элементу FUNCNAME соответствуют элементы в BASH_LINENO и BASH_SOURCE для описания стека вызовов. Например, ${FUNCNAME[$i]} была вызвана из файла ${BASH_SOURCE[$i+1]} с номером строки ${BASH_LINENO[$i]}. Встроенная команда caller отображает текущий стек вызовов, используя эту информацию.
- GROUPS
- Переменная массива, содержащая список групп, членом которых является текущий пользователь. Присвоения GROUPS не имеют значения. Если значение GROUPS не задано, то оно теряет свои специальные свойства, даже если впоследствии оно будет сброшено.
- HISTCMD
- Номер истории или индекс в списке истории текущей команды. Присвоения HISTCMD игнорируются. Если значение If HISTCMD не задано, то она теряет свои специальные свойства, даже если впоследствии она будет сброшена.
- HOSTNAME
- Автоматически устанавливается на название текущего хоста.
- HOSTTYPE
- Автоматически устанавливает строку, однозначно описывающую тип завершения, на котором выполняется bash. Значение по умолчанию зависит от системы.
- LINENO
- При каждом обращении к этому параметру оболочка подставляет десятичное число, представляющее текущий порядковый номер строки (начинающийся с 1) в скрипте или функции. Если его нет в скрипте или функции, то не гарантируется, что подставленное значение будет значимым. Если параметр LINENO не установлен, то он теряет свои специальные свойства, даже если впоследствии будет сброшен.
- MACHTYPE
- Автоматически устанавливает строку, полностью описывающую тип системы, на которой выполняется bash, в стандартном формате GNU cpu-company-system. Значение по умолчанию зависит от системы.
- MAPFILE
- Переменная массива (смотрите подраздел Массивы ниже), созданная для хранения текста, считываемого из встроенного файла mapfile, когда название переменной не указано.
- OLDPWD
- Предыдущий рабочий каталог, заданный командой cd.
- OPTARG
- Значение последнего аргумента опции, обработанного встроенной командой getopts (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).
- OPTIND
- Индекс следующего аргумента, который будет обработан встроенной командой getopts (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).
- OSTYPE
- Автоматически устанавливает строку, описывающую операционную систему, в которой выполняется bash. Значение по умолчанию зависит от системы.
- PIPESTATUS
- Переменная массива (смотрите подраздел Массивы ниже), содержащая список значений статуса завершения процессов в последнем выполненном канале интерактивного режима (который может содержать только одну команду).
- PPID
- Идентификатор процесса родительской оболочки. Эта переменная доступна только для чтения.
- PWD
- Текущий рабочий каталог, заданный командой cd.
- RANDOM
- При каждом обращении к этому параметру он расширяется до случайного целого числа в диапазоне от 0 до 32767. Присвоение значения RANDOM инициализирует последовательность случайных чисел. Если параметр RANDOM не установлен, то он теряет свои специальные свойства, даже если впоследствии будет сброшен.
- READLINE_ARGUMENT
- Любой числовой аргумент, переданный команде readline, которая была определена с помощью "bind -x" (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже), когда он был вызван.
- READLINE_LINE
- Содержимое буфера строк readline, предназначенного для использования с "bind -x" (смотрите ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).
- READLINE_MARK
- Положение метки (сохраненной точки вставки) в буфере строк readline для использования с "bind -x" (смотрите ниже раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ). Символы между точкой вставки и меткой часто называются region.
- READLINE_POINT
- Положение точки вставки в буфере строк readline для использования с "bind -x" (смотрите ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).
- REPLY
- Устанавливается в строку ввода, считываемую встроенной командой read, когда аргументы не указаны.
- SECONDS
- При каждом обращении к этому параметру он увеличивается до количества секунд с момента вызова оболочки. Если присвоено значение SECONDS, то при последующих обращениях к нему возвращается значение, равное количеству секунд с момента присвоения плюс присвоенное значение. Количество секунд при вызове оболочки и текущее время всегда определяются путем запроса системного времени. Если значение SECONDS не установлено, то он теряет свои специальные свойства, даже если впоследствии он будет сброшен.
- SHELLOPTS
- Список включенных опций оболочки, разделенных двоеточием. Каждое слово в списке является допустимым аргументом для опции -o для встроенной команды set (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ SHELL ниже). Опции, отображаемые в SHELLOPTS, указаны как on в set -o. Если эта переменная присутствует в окружающей среде при запуске bash, то каждая опция оболочки в списке будет включена перед чтением любых файлов запуска. Эта переменная доступна только для чтения.
- SHLVL
- Увеличивается на единицу при каждом запуске экземпляра bash.
- SRANDOM
- Эта переменная расширяется до 32-разрядного псевдослучайного числа при каждом обращении к ней. Генератор случайных чисел не является линейным в системах, поддерживающих /dev/urandom или arc4random, поэтому каждое возвращаемое число не имеет отношения к числам, предшествующим ему. Если генератор случайных чисел не может быть запущен, то присвоение значений этой переменной не имеют эффекта. Если значение переменной SRANDOM не задано,то она теряет свои специальные свойства, даже если впоследствии она будет сброшена.
- UID
- Расширяется до идентификатора текущего пользователя, инициализируемого при запуске командной строки. Эта переменная доступна только для чтения.
Оболочкой используются следующие переменные. В некоторых случаях bash присваивает переменной значение по умолчанию; эти случаи описаны ниже.
- BASH_COMPAT
- Это значение используется для настройки уровня совместимости оболочки. Описание различных уровней совместимости и их последствий смотрите в разделе РЕЖИМ СОВМЕСТИМОСТИ ОБОЛОЧКИ ниже. Значением может быть десятичное число (например, 4,2) или целое число (например, 42), соответствующее желаемому уровню совместимости. Если BASH_COMPAT не задано или имеет значение пустой строки, то уровень совместимости устанавливается по умолчанию для текущей версии. Если для BASH_COMPAT задано значение, которое не соответствует ни одному из допустимых уровней совместимости, то оболочка выводит сообщение об ошибке и устанавливает уровень совместимости по умолчанию для текущей версии. Допустимые значения соответствуют уровням совместимости, описанным ниже в разделе РЕЖИМ СОВМЕСТИМОСТИ ОБОЛОЧКИ. Например, 4.2 и 42 являются допустимыми значениями, которые соответствуют compat42 shopt и устанавливают уровень совместимости равным 42. Текущая версия также является допустимым значением.
- BASH_ENV
- Если этот параметр задан, когда bash выполняет скрипт оболочки, то его значение интерпретируется как название файла, содержащего команды для инициализации оболочки, как в ~/.bashrc. Значение BASH_ENV подвергается расширению параметров, замене командами и арифметическому расширению, прежде чем оно будет интерпретировано как название файла. PATH не используется для поиска результирующего названия файла.
- BASH_XTRACEFD
- Если задано целое число, соответствующее допустимому файловому дескриптору, то bash запишет выходные данные трассировки, сгенерированные при set -x включении для этого файлового дескриптора. Файловый дескриптор закрывается, если BASH_XTRACEFD сброшено или ему присвоено новое значение. Сброс значения BASH_XTRACEFD или присвоение ему пустой строки приводит к отправке выходных данных трассировки со стандартной ошибкой. Обратите внимание, что установка значения BASH_XTRACEFD равным 2 (файловый дескриптор стандартной ошибки), а затем сброс этого значения приведет к закрытию стандартной ошибки.
- CDPATH
- Путь поиска для команды cd. Это разделенный двоеточием список каталогов, в которых оболочка выполняет поиск каталогов назначения, указанных командой cd. Примерным значением является ".:~:/usr".
- CHILD_MAX
- Устанавливает количество завершенных дочерних значений статуса, которые должна запомнить оболочка. Bash не позволит уменьшить это значение ниже минимального значения, установленного в POSIX, и существует максимальное значение (в настоящее время 8192), которое не может быть перевышено. Минимальное значение зависит от системы.
- COLUMNS
- Используется командой select для определения ширины терминала при печати списков. Устанавливается автоматически, если включена опция checkwinsize или в интерактивной командной строке при получении команды SIGWINCH.
- COMPREPLY
- Переменная массива, из которой bash считывает возможные завершения, сгенерированные функцией оболочки, вызываемой программируемым средством завершения (смотрите подраздел Программируемое завершение ниже). Каждый элемент массива содержит одно возможное завершение.
- EMACS
- Если bash найдет эту переменную в окружающей среде, когда оболочка запускается со значением "t", предполагающем, что оболочка запущена в буфере оболочки Emacs, и отключено редактирование строк.
- ENV
- Расширяется и выполняется аналогично BASH_ENV (смотрите раздел ВЫЗОВ выше) при вызове интерактивной оболочки в режиме posix mode.
- EXECIGNORE
- Разделенный двоеточием список шаблонов оболочки (смотрите подраздел Сопоставление с шаблоном), определяющий список названий файлов, которые будут игнорироваться командой поиска с использованием PATH. Файлы, полные пути к которым соответствуют одному из этих шаблонов, не считаются исполняемыми файлами для целей завершения и выполнения команд с помощью поиска PATH. Это не влияет на поведение команд [, test и [[. Полные пути в хэш-таблице команд не зависят от EXECIGNORE. Используйте эту переменную, чтобы игнорировать файлы общей библиотеки, которые имеют установленный бит исполняемого файла, но не являются исполняемыми файлами. Сопоставление с шаблоном выполняется с учетом настройки опции оболочки extglob.
- FCEDIT
- Редактор по умолчанию для встроенной команды fc.
- FIGNORE
- Разделенный двоеточием список суффиксов, которые следует игнорировать при заполнении названия файла (смотрите БИБЛИОТЕКА READLINE ниже). Название файла, суффикс которого совпадает с одной из записей в FIGNORE, исключается из списка совпадающих названий файлов. Примерным значением является ".o:~" (При присвоении значения этой переменной, содержащего тильду, необходимо заключать значение в кавычки).
- FUNCNEST
- Если задано числовое значение, большее 0, то определяет максимальный уровень вложенности функции. Вызовы функций, превышающие этот уровень вложенности, приведут к прерыванию текущей команды.
- GLOBIGNORE
- Список шаблонов, разделенных двоеточием, определяющий набор названий файлов, которые будут игнорироваться при расширении названия пути. Если название файла, соответствующее шаблону расширения названия пути, также соответствует одному из шаблонов в GLOBIGNORE, то оно удаляется из списка соответствий.
- HISTCONTROL
- Разделенный двоеточием список значений, определяющий порядок сохранения команд в списке истории. Если список значений содержит ignorespace, то строки, начинающиеся с символа space, не сохраняются в списке истории. Значение ignoredups приводит к тому, что строки, соответствующие предыдущей записи журнала, не сохраняются. Значение ignoreboth является сокращением для ignorespace и ignoredups. Значение erasedups приводит к удалению всех предыдущих строк, соответствующих текущей строке, из списка истории до сохранения этой строки. Любое значение, отсутствующее в приведенном выше списке, игнорируется. Если значение HISTCONTROL не задано или не содержит допустимого значения, то все строки, считанные синтаксическим анализатором оболочки, сохраняются в списке истории в соответствии со значением HISTIGNORE. Вторая и последующие строки многострочной составной команды не проверяются и добавляются в историю независимо от значения HISTCONTROL.
- HISTFILE
- Название файла, в котором сохраняется история команд (см. ИСТОРИЯ ниже). Значение по умолчанию - ~/.bash_history. Если значение не задано, то история команд не сохраняется при выходе из оболочки.
- HISTFILESIZE
- Максимальное количество строк, содержащихся в файле истории. Когда этой переменной присваивается значение, тогда файл истории при необходимости сокращается, чтобы содержать не более этого количества строк, удаляя самые старые записи. Файл истории также сокращается до этого размера после его записи при выходе из оболочки. Если значение равно 0, то файл истории сокращается до нулевого размера. Нечисловые значения и числовые значения, меньшие нуля, запрещают усечение. Оболочка устанавливает значение по умолчанию равным значению HISTSIZE после чтения любых файлов запуска.
- HISTIGNORE
- Разделенный двоеточием список шаблонов, используемых для определения того, какие командные строки следует сохранить в списке истории. Каждый шаблон привязывается к началу строки и должен соответствовать всей строке (неявное "*" не добавляется). Каждый шаблон проверяется на соответствие строке после применения проверок, указанных в HISTCONTROL. В дополнение к обычным символам соответствия шаблону оболочки, `&” соответствует предыдущей строке истории. `&' может быть экранирован с помощью обратной косой черты; обратная косая черта удаляется перед попыткой сопоставления. Вторая и последующие строки многострочной составной команды не проверяются и добавляются в журнал независимо от значения HISTIGNORE. Сопоставление с шаблоном выполняется с учетом настройки extglob оболочки.
- HISTSIZE
- Количество команд, которые необходимо запомнить в истории команд (смотрите раздел ИСТОРИЯ. Если значение равно 0, то команды не сохраняются в списке истории. Числовые значения, меньшие нуля, приводят к тому, что каждая команда сохраняется в списке истории (ограничений нет). После прочтения любых файлов запуска оболочка устанавливает значение по умолчанию равным 500.
- HISTTIMEFORMAT
- Если эта переменная установлена и не равна нулю, то ее значение используется в качестве строки формата strftime(3) для регистрации времени, связанного с каждой записью истории, отображаемой встроенной командой history. Если эта переменная установлена, временные метки записываются в файл истории, чтобы их можно было сохранять как время сеансов оболочки. При этом используется символ комментария истории, чтобы отличать временные метки от других строк истории.
- HOME
- Домашний каталог текущего пользователя; аргумент по умолчанию для встроенной команды cd. Значение этой переменной также используется при расширении тильды.
- HOSTFILE
- Содержит название файла в том же формате, /etc/hosts который может прочитать оболочка, когда ей потребуется ввести название хоста. Список возможных дополнений названия хоста может быть изменен во время работы оболочки; при следующей попытке завершения названия хоста после изменения значения bash добавляет содержимое нового файла в существующий список. Если переменная HOSTFILE задана, но не имеет значения или не содержит названия файла, доступного для чтения, то оболочка bash попытается прочитать /etc/hosts чтобы получить список возможных расширений к названию хоста. Если значение HOSTFILE не задано, то список названий хостов очищается.
- IFS
- Внутренний разделитель полей Internal Field Separator, который используется для разделения слов после расширения и для разделения строк на слова с помощью встроенной команды read. Значение по умолчанию - "<space><tab><newline>”.
- IGNOREEOF
- Управляет действием интерактивной оболочки при получении символа EOF в качестве единственного входного сигнала. Если задано, то это значение равно количеству последовательных символов EOF, которые должны быть введены в качестве первых символов в строке ввода перед завершением работы bash. Если переменная существует, но не имеет числового значения или вообще не имеет значения, то значение по умолчанию равно 10. Если она не существует, EOF означает окончание входа в оболочку.
- INPUTRC
- Название файла для файла запуска readline, которое переопределяет значение по умолчанию ~/.inputrc (смотрите раздел БИБЛИОТЕКА READLINE ниже).
- INSIDE_EMACS
- Если эта переменная появляется в окружающей среде при запуске оболочки, то оболочка bash предполагает, что она выполняется внутри буфера Emacs и может отключить редактирование строк, в зависимости от значения TERM.
- LANG
- Используется для определения локали для любой категории, не выбранной специально, с помощью переменной, начинающейся с LC_.
- LC_ALL
- Эта переменная переопределяет значение LANG и любой другой переменной LC_, определяющей локаль.
- LC_COLLATE
- Эта переменная определяет порядок сопоставления, используемый при сортировке результатов расширения названия пути, и определяет диапазон выражений , классов эквивалентности и сопоставляющих последовательностей при расширении названия пути и сопоставлении с образцом.
- LC_CTYPE
- Эта переменная определяет интерпретацию символов и поведение классов символов при расширении названия пути и сопоставлении с шаблоном.
- LC_MESSAGES
- Эта переменная определяет локаль, используемую для перевода строк, заключенных в двойные кавычки, перед которыми стоит символ $.
- LC_NUMERIC
- Эта переменная определяет категорию локали, используемой для форматирования чисел.
- LC_TIME
- Эта переменная определяет категорию локали, используемой для форматирования данных и времени.
- LINES
- Используется командой select для определения длины столбца при печати списков выбора. Устанавливается автоматически, если включена опция checkwinsize, или в интерактивной оболочке при получении SIGWINCH.
- Если для этой переменной задано название файла или каталога, а переменная MAILPATH не задана, то bash информирует пользователя о поступлении почты в указанный файл или каталог в формате Maildir.
- MAILCHECK
- Указывает, как часто (в секундах) bash проверяет почту. Значение по умолчанию равно 60 секундам. Когда приходит время проверять почту, оболочка выполняет это перед отображением основного запроса. Если эта переменная не задана или ей присвоено значение, которое не является числом, большим или равным нулю, то оболочка отключает проверку почты.
- MAILPATH
- Разделенный двоеточием список названий файлов, которые необходимо проверить на наличие почты. Сообщение, которое будет записываться при поступлении почты в определенный файл, можно указать, отделив название файла от сообщения символом `?". При использовании в тексте сообщения, символа $_ он расширяется до названия текущего почтового файла. Пример:
MAILPATH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"'
Оболочку Bash можно настроить так, чтобы для этой переменной указывалось значение по умолчанию (по умолчанию значения нет), но расположение используемых ею файлов пользовательской почты зависит от системы (например, /var/mail/$USER).
- OPTERR
- Если установлено значение 1, то bash отображает сообщения об ошибках, сгенерированные встроенной командой getopts (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже). OPTERR инициализируется значением 1 при каждом вызове оболочки или выполнении сценария оболочки.
- PATH
- Путь поиска команд. Это разделенный двоеточием список каталогов, в которых оболочка выполняет поиск команд (смотрите раздел ВЫПОЛНЕНИЕ КОМАНДЫ ниже). Название каталога нулевой длины (null) в значении PATH указывает на текущий каталог. Название каталога с нулевым значением может быть представлено в виде двух смежных двоеточий или в виде начального или конечного двоеточия. Путь по умолчанию зависит от системы и устанавливается администратором, устанавливающим bash. Обычно используется следующее значение ``/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin''.
- POSIXLY_CORRECT
- Если эта переменная находится в окружающей среде при запуске bash, то оболочка переходит в режим posix mode перед чтением файлов запуска, как если бы была указана опция вызова --posix. Если она установлена во время работы оболочки, то bash включает режим posix mode, как если бы команда set -o posix была выполнена. Когда оболочка переходит в режим posix mode, то она устанавливает эту переменную, если она еще не была установлена.
- PROMPT_COMMAND
- Если эта переменная задана и является массивом, то значение каждого заданного элемента выполняется как команда перед выдачей каждого основного запроса. Если эта переменная задана, но не является массивом, то ее значение используется в качестве команды для выполнения.
- PROMPT_DIRTRIM
- Если задано значение, большее нуля, то это значение используется в качестве количества завершающих компонентов каталога, которые будут сохранены при расширении командной строки \w и \W (смотрите раздел ПОДСКАЗКИ ниже). Удаленные символы заменяются многоточием.
- PS0
- Значение этого параметра раскрывается (смотрите ПОДСКАЗКА ниже) и отображается интерактивной оболочкой после считывания команды и перед ее выполнением.
- PS1
- Значение этого параметра расширяется (смотрите ниже раздел " ПОДСКАЗКА") и используется в качестве основной строки запроса. Значение по умолчанию - "\s-\v\$ ".
- PS2
- Значение этого параметра расширяется, как и в случае с PS1, и используется в качестве дополнительной строки запроса. Значение по умолчанию - "> ".
- PS3
- Значение этого параметра используется в качестве запроса для команды select (смотрите раздел ГРАММАТИКА ОБОЛОЧКИ выше).
- PS4
- Значение этого параметра расширяется, как и в случае с PS1, и значение выводится перед отображением каждой команды bash во время выполнения трассировки. Первый символ расширенного значения PS4 при необходимости повторяется несколько раз, чтобы указать несколько уровней косвенного обращения. По умолчанию используется "+ ".
- SHELL
- Эта переменная расширяется до полного пути к оболочке. Если она не задана при запуске оболочки, то bash присваивает ей полный путь к оболочке входа текущего пользователя.
- TIMEFORMAT
- Значение этого параметра используется в качестве строки формата, указывающей, как должна отображаться информация о времени для конвейеров с префиксом зарезервированного слова time. Символ % вводит управляющую последовательность, которая расширяется до значения времени или другой информации. Управляющие последовательности и их значения приведены ниже; фигурные скобки обозначают необязательные части.
- %%
- Буква %.
- %[p][l]R
- Прошедшее время в секундах.
- %[p][l]U
- Количество процессорных секунд, затраченных процессором в пользовательском режиме.
- %[p][l]S
- Количество процессорных секунд, затраченных процессором в системном режиме.
- %P
- Процент использования процессора, вычисляемый как (%U + %S) / %R.
- Необязательная величина p - это цифра, указывающая точность precision, т.е. количество дробных разрядов после запятой. При значении 0 десятичная точка или дробная часть не выводятся. Можно указать не более трех знаков после запятой; значения p, превышающие 3, изменяются на 3. Если p не указано, используется значение 3.
- Необязательная величина l задает более длинный формат, включая минуты, для формы MMmSS.FFs. Значение p определяет, будет ли включена дробная часть или нет.
- Если эта переменная не задана, то bash действует так, как если бы она имела значение $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'. Если значение равно нулю, то информация о времени не отображается. При отображении строки формата добавляется символ новой строки в конце.
- TMOUT
- Если задано значение, большее нуля, то TMOUT рассматривается как тайм-аут по умолчанию для встроенной команды read. Команда select завершается, если входные данные не поступают по истечении значения TMOUT секунд, когда ввод осуществляется с терминала. В интерактивной оболочке это значение интерпретируется как количество секунд, в течение которых требуется дождаться ввода строки после выдачи основного запроса. Bash завершается после ожидания в течение указанного количества секунд, если не поступает строка ввода.
- TMPDIR
- Если задано, то bash использует его значение в качестве названия каталога, в котором bash создает временные файлы для использования оболочкой.
- auto_resume
- Эта переменная управляет взаимодействием интерактивной оболочки с пользователем и управлением заданиями. Если эта переменная задана, то простые команды из одного слова без перенаправлений рассматриваются как кандидаты на возобновление существующего остановленного задания. Двусмысленность недопустима; если имеется несколько заданий, начинающихся с введенной строки, то выбирается задание, к которому был последний доступ. Значение названия name остановленного задания в данном контексте - это командная строка, используемая для его запуска. Если задано значение exact, то указанная строка должна точно соответствовать названию остановленного задания; если задано значение substring, то указанная строка должна совпадать с подстрокой названия остановленного задания. Значение substring обеспечивает функциональность, аналогичную значению %? идентификатора задания (смотрите раздел УПРАВЛЕНИЕ ЗАДАНИЕМ ниже). Если задано любое другое значение, то указанная строка должна быть префиксом к названию остановленного задания; это обеспечивает функциональность, аналогичную идентификатору задания %string.
- histchars
- Два или три символа, которые управляют расширением истории и токенизацией (смотрите раздел РАСШИРЕНИЕ ИСТОРИИ ниже). Первый символ - history expansion сигнализирует о начале расширения истории, обычно `!'. Второй символ - это символ history expansion, который используется в качестве сокращения для повторного выполнения предыдущей введенной команды, заменяя в команде одну строку на другую. По умолчанию используется "^". Необязательный третий символ - это символ, который указывает на то, что оставшаяся часть строки является комментарием, если она находится в качестве первого символа слова (обычно это - "#"). Символ комментария к истории приводит к пропуску подстановки истории для оставшихся слов в строке. Это не обязательно приводит к тому, что синтаксический анализатор оболочки обрабатывает остальную часть строки как комментарий.
Массивы¶
Bash предоставляет одномерные индексированные и ассоциативные массивы переменных. В качестве индексированного массива может использоваться любая переменная. Встроенная команда declare явно объявляет массив. Максимальный размер массива не ограничен, равно как и не требуется, чтобы элементы индексировались или присваивались последовательно. Ссылки на индексированные массивы используются с использованием целых чисел (включая арифметические выражения) и основаны на нуле; ссылки на ассоциативные массивы используются с использованием произвольных строк. Если не указано иное, то индексы в индексированных массивах должны быть целыми неотрицательными числами.
Индексированный массив создается автоматически, если какой-либо переменной присваивается значение с использованием синтаксиса name[subscript]=value. Значение subscript обрабатывается как арифметическое выражение, которое должно быть преобразовано в число. Чтобы явно объявить индексированный массив, используйте declare -a name (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже). Также допустимо declare -a name[subscript] ; subscript игнорируется.
Ассоциативные массивы создаются с помощью команды declare -A name.
Атрибуты могут быть заданы для переменной массива с помощью встроенных команд declare и readonly. Каждый атрибут применяется ко всем элементам массива.
Массивам присваиваются значения с использованием составных присваиваний вида name=(value1 ... valuen), где каждое value может иметь вид [subscript]=string. Для присвоения индексированных массивов не требуется ничего, кроме string. Каждое значение value в списке расширяется с использованием всех расширений оболочки, описанных ниже в разделе РАСШИРЕНИЕ. При присвоении массивам индексов, если указаны необязательные скобки и нижний индекс, то присваивается этот индекс; в противном случае индекс присваиваемого элемента является последним индексом, выражению присвоенному, плюс единица. Индексация начинается с нуля.
При присвоении ассоциативному массиву, слова в составном присвоении могут быть: 1) либо командами присваивания, для которых требуется нижний индекс, 2) либо списком слов, который интерпретируется как последовательность чередующихся ключей и значений: name=( key1 value1 key2 value2 ...). Они обрабатываются аналогично name=( [key1]=value1 [key2]=value2 ...). Первое слово в списке определяет, как будут интерпретироваться остальные слова; все именования в списке должны быть однотипными. При использовании пар ключ/значение ключи не должны отсутствовать или быть пустыми; последнее пропущенное значение обрабатывается как пустая строка.
Этот синтаксис также поддерживается встроенной командой declare. Отдельные элементы массива могут быть определены с использованием синтаксиса name[subscript]=value, представленного выше. При присвоении массиву индексов, если name содержит отрицательное число, то это число интерпретируется как относительное к единице, превышающей максимальный индекс name, поэтому отрицательные индексы отсчитываются от конца массива, а индекс, равный -1, ссылается на последний элемент массива.
Оператор += будет добавляться к переменной массива при присваивании с использованием синтаксиса составного присваивания; смотрите раздел ПАРАМЕТРЫ выше.
На любой элемент массива можно ссылаться с помощью ${name[subscript]}. Фигурные скобки необходимы для того, чтобы избежать конфликтов при расширении названия пути. Если subscript равен @ или *, то слово расширяется до всех элементов name. Эти нижние индексы (subscript) различаются только в том случае, если слово заключено в двойные кавычки. Если слово заключено в двойные кавычки, то ${name[*]} расширяется до одного слова со значением каждого элемента массива, разделенного первым символом специальной переменной IFS и ${name[@]} расширяет каждый элемент name до отдельного слова. Когда элементов массива нет, то ${name[@]} } расширяется до нуля. Если расширение в двойных кавычках происходит внутри слова, расширение первого параметра соединяется с начальной частью исходного слова, а расширение последнего параметра соединяется с последней частью исходного слова. Это аналогично расширению специальных параметров * и @ (смотрите подраздел Специальные параметры выше). ${#name[subscript]} расширяется до длины ${name[subscript]}. Если subscript равен * или @, то расширение равно количеству элементов в массиве. Если значение subscript, используемое для ссылки на элемент индексированного массива, равно числу, меньшему нуля, то оно интерпретируется как относительное к единице, превышающей максимальный индекс массива, поэтому отрицательные индексы отсчитываются от конца массива, а индекс, равный -1, ссылается на последний элемент массива.
Ссылка на переменную массива без нижнего индекса эквивалентна ссылке на массив с нижним индексом, равным 0. Любая ссылка на переменную с использованием допустимого нижнего индекса является допустимой и bash, при необходимости, создаст массив.
Переменная массива считается заданной, если индексу присвоено значение. Строка ноль является допустимым значением.
Можно получить ключи (индексы) массива, а также значения. Выражения ${!name[@]} и ${!name[*]} расширяются до индексов, присвоенных переменной массива name. Обработка при использовании двойных кавычек аналогична расширению специальных параметров @ и * в двойных кавычках.
Встроенная команда unset используется для уничтожения массивов. Команда unset name[subscript] уничтожает элемент массива с индексом subscript как для индексированных, так и для ассоциативных массивов. Отрицательные индексы индексированных массивов интерпретируются так, как описано выше. Сброс последнего элемента переменной массива не приводит к сбросу значения переменной. unset name, где name - массив, приводит к удалению всего массива. unset name[subscript], где subscript - это * или @, ведет себя по-разному в зависимости от того, является ли name индексированным или ассоциативным массивом. Если name является ассоциативным массивом, то элемент с индексом * или @ удаляется. Если name является индексированным массивом, то команда unset удаляет все элементы, но не удаляет сам массив.
При использовании названия переменной с подстрочным индексом в качестве аргумента команды, например, с помощью unset, без использования синтаксиса расширения слов, описанного выше, аргумент может быть расширен с помощью названия пути. Если расширение названия пути нежелательно, то аргумент следует заключить в кавычки.
Встроенные команды declare, local и readonly поддерживают опцию -a для указания индексированного массива и опцию -A для указания ассоциативного массива. Если указаны обе опции, то приоритет имеет опция -A. Встроенная команда read поддерживает опцию -a, чтобы преобразовать список слов, считываемых со стандартного ввода, в массив. Встроенные команды set и declare отображают значения массива таким образом, чтобы их можно было повторно использовать в качестве значений массива.
РАСШИРЕНИЕ¶
Расширение выполняется в командной строке после того, как оно было разбито на слова. Существует семь видов расширения: brace expansion, tilde expansion, parameter and variable expansion, command substitution, arithmetic expansion, word splitting и pathname expansion.
Порядок расширения следующий: расширение скобками, расширение тильдой, расширение параметрами и переменными, арифметическое расширение и подстановка команд (выполняется слева направо), разделение слов и расширение названия пути.
В системах, которые могут это поддерживать, доступно дополнительное расширение: подстановка процессов process substitution. Это выполняется одновременно с расширением тильды, параметра, переменной, арифметическим расширением и подстановкой команд.
После выполнения этих расширений символы кавычек, присутствующие в исходном слове, удаляются (quote removal), если только они сами не были заключены в кавычки.
Только расширение скобками, разделение слов и расширение названия пути могут увеличить количество слов в расширении; другие расширения расширяют одно слово только до одного слова. Единственными исключениями из этого правила являются расширения "$@" и "${name[@]}", а также, в большинстве случаев, $* и ${name[*]} как объяснялось выше (смотрите раздел ПАРАМЕТРЫ).
Расширение скобок¶
Расширение скобок Brace expansion - это механизм, с помощью которого могут быть сгенерированы произвольные строки. Этот механизм аналогичен расширение названия пути pathname expansion, но созданные названия файлов необязательно должны существовать. Шаблоны, которые следует раскрывать фигурными скобками, имеют форму необязательной преамбулы preamble, за которой следует либо ряд строк, разделенных запятыми, либо выражение последовательности между парой фигурных скобок, за которым следует необязательный постскриптум postscript. К каждой строке, заключенной в фигурные скобки, добавляется преамбула, а затем к каждой результирующей строке добавляется постскриптум, расширяющийся слева направо.
Раскрытия в фигурных скобках могут быть вложенными. Результаты для каждой развернутой строки не сортируются, сохраняется порядок слева направо. Например, a{d,c,b}e расширяется до "ade ace abe".
Выражение последовательности принимает вид {x..y[..incr]}, где x и y являются либо целыми числами, либо отдельными буквами, а incr, необязательное приращение - это целое число. Когда задаются целые числа, выражение расширяется до каждого числа между x и y включительно. Перед указанными целыми числами может быть добавлен префикс 0, чтобы все члены имели одинаковую ширину. Когда x или y начинаются с нуля, оболочка пытается заставить все сгенерированные термины содержать одинаковое количество цифр, при необходимости добавляя нуль. При вводе букв выражение расширяется до каждого лексикографического символа между x и y включительно, используя локаль С по умолчанию. Обратите внимание, что x и y должны быть одного типа (целые или буквенные). При указании приращения оно используется как разница между каждым членом. Приращение по умолчанию равно 1 или -1, соответственно.
Раскрытие скобок выполняется перед любыми другими расширениями, и в результате сохраняются все символы, характерные для других расширений. Это строго текстовое дополнение. Оболочка Bash не применяет никакой синтаксической интерпретации к контексту расширения или к тексту между фигурными скобками.
Корректно оформленное расширение в виде фигурных скобок должно содержать открывающие и закрывающие скобки без кавычек и, по крайней мере, одну запятую без кавычек или корректное выражение последовательности. Любое неправильно оформленное расширение в виде фигурных скобок будет оставлено без изменений. Буква { или , может быть заключена в кавычки с обратной косой чертой, чтобы ее нельзя было рассматривать как часть выражения, заключенного в фигурные скобки. Чтобы избежать конфликтов с расширением параметра, строка ${ не считается подходящей для расширения фигурными скобками и запрещает расширение фигурными скобками до закрытия }.
Эта конструкция обычно используется в качестве сокращения, когда общий префикс генерируемых строк длиннее, чем в приведенном ниже примере:
mkdir /usr/local/src/bash/{old,new,dist,bugs}
Расширение фигурной скобки приводит к небольшой несовместимости с предыдущими версиями sh. sh не обрабатывает открывающие или закрывающие фигурные скобки специально, когда они появляются как часть слова и сохраняет их в выходных данных. Bash удаляет фигурные скобки из слов в результате расширения фигурной скобки. Например, слово, введенное в sh как file{1,2}, отображается в выходных данных идентично. То же самое слово выводится как file1 file2 после расширения с помощью bash. Если требуется строгая совместимость с sh, то запустите bash с опцией +B или отключите расширение скобок с помощью опции +B для команды set (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).
Расширение тильды¶
Если слово начинается с символа тильды без кавычек (~), то все символы, предшествующие первой косой черте без кавычек (или все символы, если косая черта без кавычек отсутствует), считаются префиксом тильды tilde-prefix. Если ни один из символов в префиксе тильды не заключен в кавычки, то символы в префиксе тильды, следующие за тильдой, рассматриваются как возможное название входа login name. Если это название является пустой строкой, то тильда заменяется значением параметра оболочки HOME. Если значение HOME не задано, то вместо него подставляется домашний каталог пользователя, выполняющего оболочку. В противном случае префикс тильды заменяется на домашний каталог, связанный с указанным названием входа.
Если префикс тильды равен "~+", то значение переменной оболочки PWD заменяет префикс тильды. Если префикс тильды равен "~-", то подставляется значение переменной оболочки OLDPWD, если оно задано. Если символы, следующие за тильдой в префиксе тильды, состоят из числа N, и необязательно с префиксом "+" или "-", то префикс тильды заменяется соответствующим элементом из стека каталогов, как это было бы отображено в встроенной команде dirs, вызываемой с префиксом тильды в качестве аргумента. Если символы, следующие за тильдой в префиксе тильды, состоят из числа без, стоящих перед ним символов "+" или "-", то предполагается символ "+".
Если название для входа неверное или тильда не используется, то слово остается неизмененным.
Каждое присвоение переменной проверяется на наличие префиксов тильд без кавычек, следующих непосредственно за : или первым =. В этих случаях также выполняется расширение тильд. Следовательно, можно использовать названия файлов с тильдами при присвоении PATH, MAILPATH и CDPATH, а оболочка им присвоит расширенное значение.
Bash также выполняет расширение тильдой слов, удовлетворяющих условиям присвоения переменных (как описано выше в разделе ПАРАМЕТРЫ), когда они появляются в качестве аргументов для простых команд. Bash этого не делает, за исключением команд declaration, перечисленных выше, когда она находятся в режиме posix mode.
Расширение параметра¶
Символ "$" указывает на расширение параметра, подстановку команды или арифметическое расширение. Название параметра или расширяемый символ могут быть заключены в фигурные скобки, которые необязательны, однако служат для защиты расширяемой переменной и следующих непосредственно за ней символов, которые могут быть интерпретированы как часть названия.
При использовании фигурных скобок соответствующая закрывающая скобка - это первый символ "}", не экранированный обратной косой чертой или заключенная в кавычки строка, а также строка, не содержащая встроенного арифметического расширения, подстановки команд или расширения параметров.
- ${parameter}
- Подставляется значение параметра parameter. Фигурные скобки обязательны, если parameter является позиционным параметром, содержащим более одной цифры, или если за parameter следует символ, который не следует интерпретировать как часть его названия. Параметр parameter является параметром оболочки, как описано выше в разделе ПАРАМЕТРЫ) или ссылкой на массив (смотрите подраздел Массивы).
Если первый символ parameter является восклицательным знаком (!), а parameter не является nameref, то это вводит определенный уровень косвенности. Bash использует значение, сформированное путем расширения остальной части parameter, в качестве нового parameter; затем оно расширяется, и это значение используется в остальной части расширения, а не в расширении исходного parameter. Это называется косвенное расширение indirect expansion. Значение может быть расширено с помощью тильды, параметра, подстановки команды и арифметического расширения. Если parameter является значением nameref, то оно расширяется до названия параметра, на который ссылается parameter, вместо выполнения полного косвенного расширения. Исключением из этого правила являются расширения ${!prefix*} и ${!name[@]}, описанные ниже. Восклицательный знак должен стоять непосредственно за левой фигурной скобкой, чтобы ввести косвенность.
В каждом из приведенных ниже случаев слово word может быть расширено тильдой, расширено параметром, подменено командой и расширено арифметически.
Если не выполняется расширение подстроки, используя описанные ниже формы (например, :-), то bash проверяет наличие параметра, который не задан или равен нулю. Если не указывать двоеточие, то проверка выполняется только для параметра, который не задан.
- ${parameter:-word}
- Использовать значения по умолчанию Use Default Values. Если значение parameter не задано или равно нулю, то оно заменяется расширением слова word. В противном случае подставляется значение parameter.
- ${parameter:=word}
- Присвоить значения по умолчанию Assign Default Values. Если значение parameter не задано или равно нулю, расширение слова word присваивается параметру parameter. Затем заменяется значение parameter. Позиционные параметры и специальные параметры не могут быть присвоены таким образом.
- ${parameter:?word}
- Ошибка ввода, если значение равно нулю или не задано Display Error if Null or Unset. Если parameter равен нулю или не задан, а расширение слова word (или соответствующее сообщение, если word отсутствует), то записывается сообщение в вывод стандартных ошибок, а оболочка, если она не интерактивна, завершает работу. В противном случае заменяется значение parameter.
- ${parameter:+word}
- Используйте альтернативное значение Use Alternate Value. Если значение parameter равно нулю или не задано, то ничего не заменяется, в противном случае подставляется расширение слова word.
- ${parameter:offset}
- ${parameter:offset:length}
- Расширение
подстроки
Substring Expansion.
Расширяется
до
символов
length
значения
parameter, начиная
с символа,
указанного
в offset. Если parameter
равен @ или
*, то
индексированный
массив,
подписанный
@ или * или
ассоциативное
название
массива, то
результаты
будут
отличаться
так, как
это
описано
ниже. Если
длина length не
определена,
то
расширяется
до
подстроки
значения
parameter,
начинающейся
с символа,
указанного
в offset и
расширяющейся
до конца
значения.
Значения
length и offset
являются
арифметическими
выражениями
(смотрите
раздел
АРИФМЕТИЧЕСКИЕ
ВЫЧИСЛЕНИЯ
ниже).
Если значение offset равно числу, меньшему нуля, то это значение используется в качестве смещения в символах от конца значения parameter. Если значение длины length равно числу, меньшему нуля, это интерпретируется как смещение в символах от конца значения parameter, а не на количество символов, а расширением являются символы между offset и этим результатом. Примечание. Отрицательное смещение должно быть отделено от двоеточия по крайней мере одним пробелом, чтобы его не перепутать с расширением :-.
Если параметр parameter равен @ или *, то результатом будет длина length позиционных параметров, начинающихся с offset. Отрицательное значении offset берется относительно значения, на единицу превышающего наибольший позиционный параметр, поэтому значение смещения, равное -1, вычисляется как значение последнего позиционного параметра. Если значение length равно числу, меньшему нуля, то это ошибка расширения.
Если parameter - это название индексированного массива, подписанное символом @ или *, то результатом будет length элементов массива, начинающихся с ${parameter[offset]}. Значение offset берется отрицательным относительно значения, на единицу превышающего максимальный индекс указанного массива. Если значение length меньше нуля, то это является ошибкой расширения.
Расширение подстроки, примененное к ассоциативному массиву, приводит к неопределенным результатам.
Индексация подстрок выполняется на основе нуля, если не используются позиционные параметры, и в этом случае индексация начинается с 1 по умолчанию. Если значение offset равно 0 и используются позиционные параметры, то префиксу списка присваивается значение $0.
- ${!prefix*}
- ${!prefix@}
- Названия, соответствующие префиксу Names matching prefix. Расширяется до названий переменных, названия которых начинаются с prefix, отделенных первым символом специальной переменной IFS. Когда используется @ и расширение отображается в двойных кавычках, то каждое название переменной расширяется до отдельного слова.
- ${!name[@]}
- ${!name[*]}
- Список ключей массива List of array keys. Если name является переменной массива, то расширяется до списка индексов массива (ключей), назначенных в name. Если name не является массивом, то расширяется до 0, если задано значение name, и ноль в противном случае. Когда используется @ и расширение приведено в двойных кавычках, то каждый ключ расширяется до отдельного слова.
- ${#parameter}
- Длина параметра Parameter length. Подставляется длина значения parameter в символах. Если parameter равен * или @, то подставляемое значение представляет собой количество позиционных параметров. Если parameter - это название массива, помеченное символом * или @, то подставляемое значение - это количество элементов в массиве. Если parameter - это название индексированного массива, помеченное отрицательным числом, это число интерпретируется как относительное к единице, превышающей максимальный индекс parameter, поэтому отрицательные индексы отсчитываются от конца массива, а индекс, равный -1, ссылается на последний элемент.
- ${parameter#word}
- ${parameter##word}
- Удаление шаблона сопоставления префикса Remove matching prefix pattern. Слово word расширяется для получения шаблона, как и при расширении названия пути и сопоставляется с расширенным значением параметра parameter с использованием правил, описанных в подразделе Сопоставление с шаблоном ниже. Если шаблон совпадает с началом значения parameter, то результатом расширения является расширенное значение parameter с самым коротким совпадающим шаблоном (в случае `#") или самым длинным совпадающим шаблоном (в случае `##"). Если parameter равен @ или *, то операция удаления шаблона применяется к каждому позиционному параметру по очереди и в результате получается расширенный список. Если параметр parameter является переменной массива с индексом @ или *, то операция удаления шаблона применяется к каждому элементу массива по очереди, а расширение - это результирующий список после удаления.
- ${parameter%word}
- ${parameter%%word}
- Удаление шаблона совпадающего с суффиксом Remove matching suffix pattern. Слово word расширяется для получения шаблона точно так же, как при расширении названия пути и сопоставляется с расширенным значением параметр parameter с использованием правил, описанных в подразделе Сопоставление с шаблоном ниже. Если шаблон соответствует конечной части расширенного значения parameter, то результатом расширения является удаление расширенного значения parameter соответствующее самому короткому шаблону (в случае “%”) или соответствующее самому длинному шаблону (в случае “%%” case). Если parameter равен @ или *, то операция удаления шаблона применяется к каждому позиционному параметру по очереди и в результате получается расширенный список. Если parameter является переменной массива с индексом @ или *, то операция удаления шаблона применяется к каждому элементу массива по очереди, а расширение - это результирующий список.
- ${parameter/pattern/string}
- ${parameter//pattern/string}
- ${parameter/#pattern/string}
- ${parameter/%pattern/string}
- Подстановка
шаблона Pattern
substitution. Шаблон
pattern
расширяется
для
получения
шаблона
точно так
же, как при
расширении
названия
пути.
Параметр
Parameter
расширяется,
и самое
длинное
совпадение
шаблона pattern
с его
значением
заменяется
на строку
string. Строка
string
подвергается
расширению
с помощью
тильды,
параметров
и
переменных,
арифметического
расширения,
подстановки
команд и
процессов,
а также
удалению
кавычек.
Сопоставление
выполняется
с
использованием
правил,
описанных
в
подразделе
Сопоставление
с
шаблоном
ниже. В
первой
форме,
приведенной
выше,
заменяется
только
первое
совпадение.
Если есть
две косые
черты,
разделяющие
parameter и pattern
(вторая
форма
выше), то
все
совпадения
pattern
заменяются
на string. Если
шаблону pattern
предшествует
# (третья
форма
выше), то
оно должно
совпадать
с началом
расширенного
значения
parameter. Если
перед pattern
стоит %
(четвертая
форма
выше), то
оно должно
совпадать
с
расширенным
значением
parameter. Если
расширенное
значение
string равно
нулю, то
совпадения
с parameter
удаляются.
Если string
имеет
значение
ноль, то
совпадения
с parameter
удаляются,
а /,
следующее
за parameter,
может быть
опущено.
Если опция оболочки patsub_replacement включена с помощью shopt, то все экземпляры & без кавычек в строке string заменяются соответствующей частью pattern.
Заключение в кавычки любой части строки string препятствует замене при расширении заключенной в кавычки части, включая строки для замены, хранящиеся в переменных оболочки. Обратная косая черта будет заменять & в string; обратная косая черта удаляется, чтобы разрешить использование литерала & в заменяющей строке. Обратная косая черта также может использоваться для экранирования обратной косой черты; \\ приводит к буквальной обратной косой черте при замене. Пользователи должны быть осторожны, если строка string заключена в двойные кавычки, чтобы избежать нежелательного взаимодействия между обратной косой чертой и двойными кавычками, поскольку обратная косая черта имеет специальное значение в двойных кавычках. Замена шаблона выполняет проверку на наличие & без кавычек после расширения строки string; программисты оболочки должны указывать в кавычках все вхождения &, которые они хотят понимать буквально при замене, и убедиться, что все вхождения &, которые они хотят заменить, не заключены в кавычки.
Если включена опция оболочки nocasematch, то сопоставление выполняется без учета регистра буквенных символов. Если параметр parameter равен @ или *, то операция подстановки применяется к каждому позиционному параметру по очереди и в результате получается расширенный список. Если parameter является переменной массива с индексом @ или *, то операция подстановки применяется к каждому элементу массива по очереди, а расширение является результирующим списком.
- ${parameter^pattern}
- ${parameter^^pattern}
- ${parameter,pattern}
- ${parameter,,pattern}
- Изменение регистра Case modification. Это расширение изменяет регистр буквенных символов в параметре parameter. Шаблон pattern расширяется для создания шаблона, как и при расширении названия пути. Каждый символ в расширенном значении параметра parameter проверяется на соответствие pattern и, если он соответствует шаблону, то преобразуется его регистр. Шаблон не должен пытаться соответствовать более чем одному символу. Оператор ^ преобразует строчные буквы, соответствующие pattern, в прописные; оператор , преобразует соответствующие прописные буквы в строчные. Расширения ^^ и ,, преобразуют каждый совпадающий символ в расширенное значение; расширения ^ и , сопоставляют и преобразуют только первый символ в расширенном значении. Если pattern опущен, то он обрабатывается как ?, который соответствует каждому символу. Если parameter равен @ или *, то операция изменения регистра применяется к каждому позиционному параметру по очереди и в результате получается расширенный список. Если parameter является переменной массива с индексом @ или *, то операция изменения регистра применяется к каждому элементу массива по очереди, а расширение - это результирующий список.
- ${parameter@operator}
- Преобразование параметра Parameter transformation. Расширение представляет собой либо преобразование значения параметр parameter, либо информации о самом parameter, в зависимости от значения оператора operator. Каждый operator состоит из одной буквы:
- U
- Расширение представляет собой строку, представляющую собой значение параметра parameter, со строчными буквенными символами, преобразованными в верхний регистр.
- u
- Расширение представляет собой строку, представляющую собой значение параметра parameter, причем первый символ преобразуется в верхний регистр, если он алфавитный.
- L
- Расширение представляет собой строку, представляющую собой значение параметра parameter, с заглавными буквами, преобразованными в строчные.
- Q
- Расширение представляет собой строку, представляющую собой значение parameter, заключенное в кавычки, в формате, который можно повторно использовать в качестве входных данных.
- E
- Расширение представляет собой строку, которая является значением параметра parameter с расширенными управляющими последовательностями обратной косой черты, как при использовании механизма кавычек $'...'.
- P
- Расширение представляет собой строку, которая является результатом расширения значения parameter, как если бы это была строка запроса (смотрите раздел ПОДСКАЗКА ниже).
- A
- Расширение представляет собой строку в виде команды присваивания или команды declare, которая при вычислении воссоздает параметр parameter с его атрибутами и значением.
- K
- Выдает, возможно, заключенную в кавычки версию значения параметра parameter, за исключением того, что она выводит значения индексированных и ассоциативных массивов в виде последовательности пар ключ -значение, заключенных в кавычки (смотрите подраздел Массивы выше).
- a
- Расширение представляет собой строку, состоящую из значений флагов, представляющих атрибуты parameter.
- k
- Аналогично преобразованию K, но расширяет ключи и значения индексированных и ассоциативных массивов до отдельных слов после разделения слов.
Если parameter равен @ или *, то операция применяется к каждому позиционному параметру по очереди и в результате получается расширенный список. Если parameter является переменной массива с индексом @ или *, то операция применяется к каждому элементу массива по очереди и результатом расширения является результирующий список.
Результат расширения зависит от разделения слов и расширения названия пути, как описано ниже.
Подстановка команд¶
Подстановка команды Command substitution позволяет заменить название команды при выводе команды. Существует две формы:
$(command)
Bash протизводит расширение, выполняя command в окружающей среде подоболочки и заменяя подстановку команды стандартным выводом команды, при этом удаляются все завершающие новые строки. Встроенные новые строки не удаляются, но они могут быть удалены при разделении слов. Команда подстановки $(cat file) может быть заменена эквивалентной, но более быстрой командой $(< file).
При замене обратной кавычки в старом стиле обратная косая черта сохраняет свое буквальное значение, за исключением тех случаев, когда за ней следует $, ` или \. Первая обратная кавычка, перед которой не стоит обратная косая черта, завершает замену команды. При использовании формы $(command) все символы, заключенные в круглые скобки, составляют команду; ни один из них не обрабатывается специально.
Замены команд могут быть вложенными. Для вложения при использовании формы с обратными кавычками, закройте внутренние кавычки обратной косой чертой.
Если замена выполняется в двойных кавычках, то разделение слов и расширение пути к результатам не выполняются.
Арифметическое расширение¶
Арифметическое расширение позволяет вычислять арифметическое выражение и заменить результат. Формат арифметического расширения следующий:
$((expression))
Старый формат $[expression] устарел и будет удален в следующих версиях bash.
Выражение expression расширяется так же, как если бы оно было заключено в двойные кавычки, но символы двойных кавычек в expression не обрабатываются специальным образом и удаляются. Все токены в выражении расширяются с помощью параметров и переменных, заменяются командой и удаляются кавычки. Результат обрабатывается как вычисляемое арифметическое выражение. Арифметические расширения могут быть вложенными.
Вычисление выполняется в соответствии с правилами, приведенными ниже в разделе АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ. Если значение expression неверно, то bash выводит сообщение, указывающее на ошибку и замена не выполняется.
Подстановка процесса¶
Подстановка процесса Process substitution позволяет ссылаться на входные или выходные данные процесса, используя название файла. Она принимает форму <(list) или >(list). Процесс list выполняется асинхронно, а его входные или выходные данные отображаются в виде названия файла. Это название файла передается в качестве аргумента текущей команде в результате расширения. Если используется форма >(list), то запись в файл обеспечит ввод данных для list. Если используется форма <(list), то файл, переданный в качестве аргумента, должен быть прочитан для получения выходных данных list. Подстановка процессов поддерживается в системах, поддерживающих именованные каналы (FIFOs) или метод именования открытых файлов /dev/fd.
При наличии возможности подстановка процесса выполняется одновременно с расширением параметров и переменных, подстановкой команд и арифметическим расширением.
Разделение слов¶
Оболочка сканирует результаты расширения параметров, подстановки команд и арифметического расширения, которые не были заключены в двойные кавычки, для разделения слов, word splitting.
Оболочка обрабатывает каждый символ IFS как разделитель и разбивает результаты других расширений на слова, используя эти символы в качестве разделителей полей. Если значение IFS не задано или его значение точно равно <space><tab><newline>, то по умолчанию, последовательности <space>, <tab> и <newline> в начале и конце результатов предыдущих расширений игнорируются, а любая последовательность символов IFS, не совпадающая с результатами предыдущих расширений (начало или конец) служат для разделения слов. Если IFS имеет значение, отличное от значения по умолчанию, то последовательности пробельных символов space, tab и newlineв начале и конце слова игнорируются до тех пор, пока в значении присутствует пробельный символ из IFS (пробельный символ IFS). Любой символ в IFS, который не является пробельным символом IFS, вместе с любыми соседними, разделяющими поле, символами IFS. Последовательность пробельных символов IFS также используется в качестве разделителя. Если значение IFS равно нулю, разбиение на слова не происходит.
Явные нулевые аргументы ("" или '') сохраняются и передаются командам в виде пустых строк. Неявные нулевые аргументы без кавычек, возникающие в результате расширения параметров, не имеющих значений, удаляются. Если параметр без значения раскрывается в двойных кавычках, то в результате получается нулевой аргумент, который сохраняется и передается команде в виде пустой строки. Когда аргумент нуль, заключенный в кавычки, появляется как часть слова, расширение которого не равно нулю, то аргумент нуль удаляется. То есть слово -d'' становится словом -d после разделения слов и удаления аргумента нуль.
Обратите внимание, что если расширение не происходит, то и разделение не выполняется.
Расширение названия пути¶
После разделения слов, если не определена опция -f, то bash проверяет каждое слово на наличие символов *, ? и [. Если один из этих символов появляется и не заключен в кавычки, то слово рассматривается как шаблон pattern и заменяется отсортированным по алфавиту списком названий файлов, соответствующих шаблону (смотрите подраздел Сопоставление с шаблоном выше). Если совпадающие названия файлов не найдены, а опция оболочки nullglob не определена, то слово остается без изменений. Если задана опция nullglob и совпадений не найдено, то слово удаляется. Если задана опция оболочки failglob и совпадений не найдено, то выводится сообщение об ошибке и команда не выполняется. Если включена опция оболочки nocaseglob, то сопоставление выполняется без учета регистра буквенных символов. Примечание. При использовании выражений диапазона, таких как [a-z] (смотрите ниже), могут использоваться другие буквы, в зависимости от установки переменной LC_COLLATE. Когда для расширения названия пути используется шаблон, то для символа `." в начале названия или непосредственно после косой черты должно быть указано явное соответствие, если только не задана опция оболочки dotglob. Чтобы названия файлов соответствовали `." и `..", шаблон должен начинаться с `." (например, `.?"), даже если задано значение dotglob. Если определена опция оболочки globskipdots, то названия файлов `." и `.." никогда не совпадают, даже если шаблон начинается с `.". Если названия путей не совпадают, то символ `." не обрабатывается специальным образом. При сопоставлении названия пути символ косой черты всегда должен быть явно сопоставлен с косой чертой в шаблоне, но в других контекстах сопоставления он может быть сопоставлен со специальным символом шаблона, как описано выше в подразделе Сопоставление с шаблоном. Смотрите описание shopt выше в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ в описании опций оболочки nocaseglob, nullglob, globskipdots, failglob и dotglob.
Переменная оболочки GLOBIGNORE может использоваться для ограничения набора названий файлов, соответствующих шаблону pattern. Если задано значение GLOBIGNORE, то все совпадающие названия файлов, которые также соответствуют одному из шаблонов в GLOBIGNORE, удаляются из списка совпадений. Если установлена опция nocaseglob, то сопоставление с шаблонами в GLOBIGNORE выполняется без учета регистра. Названия файлов `." и `.." всегда игнорируются, если задано значение GLOBIGNORE, а не нуль. Однако установка для GLOBIGNORE ненулевого значения приводит к включению опции оболочки dotglob, поэтому все остальные названия файлов, начинающиеся с `.", будут совпадать. Чтобы вернуть прежнее поведение при игнорировании названий файлов, начинающихся с ".", сделайте ".*" одним из шаблонов в GLOBIGNORE. Опция dotglob отключена, если GLOBIGNORE не установлено. Сопоставление с шаблоном выполняется в соответствии с опцией оболочки extglob.
Сопоставление с шаблоном
Любой символ, который появляется в шаблоне, за исключением специальных символов шаблона, описанных ниже, соответствует самому себе. Символ NUL может не встречаться в шаблоне. Обратная косая черта заменяет следующий символ; при сопоставлении экранирующая обратная косая черта отбрасывается. Специальные символы шаблона должны быть заключены в кавычки, если они должны быть подобраны буквально.
Специальные символы шаблона имеют следующие значения:
- *
- Соответствует любой строке, включая строку ноль. Когда опция оболочки globstar включена и * используется в контексте расширения названия пути, тогда два соседних символа *, используемых в качестве единого шаблона, будут соответствовать всем файлам и нулю или большинству каталогов и подкаталогов. Если за ним следует символ /, то двум соседним буквам * будут соответствовать только каталоги и подкаталоги.
- ?
- Соответстветствие любому отдельному символу.
- [...]
- Соответствует
любому из
вложенных
символов.
Пара
символов,
разделенных
дефисом,
обозначает
выражение
для
диапазона
range expression; любой
символ,
который
находится
между
этими
двумя
символами
включительно,
с
использованием
последовательности
сопоставления
и набора
символов
текущей
локали,
считается
соответствующим.
Если
первым
символом,
следующим
за [,
является
символ !
или ^, то
сопоставляется
любой
символ, не
заключенный
в скобки.
Порядок
сортировки
символов в
выражениях
для
диапазона
и символы,
включенные
в диапазон,
определяются
текущей
локалью и
значениями
переменных
оболочки
LC_COLLATE или
LC_ALL, если
они
установлены.
Чтобы
получить
традиционную
интерпретацию
выражений
диапазона,
где [a-d]
эквивалентно
[abcd],
установите
значение
переменной
оболочки
LC_ALL равным C
или
включите
опцию
оболочки
globasciiranges.
Символу -
можно
подобрать
соответствие,
включив
его в
качестве
первого
или
последнего
символа в
наборе.
Символу ]
можно
подобрать
соответствие,
включив
его в
качестве
первого
символа в
наборе.
Внутри [ и ] классы символов character classes могут быть указаны с использованием синтаксиса [:class:], где класс class - это один из следующих классов, определенных в стандарте POSIX:
Класс символов соответствует любому символу, принадлежащему к этому классу. Класс символов слова word соответствует буквам, цифрам и символу _.
Внутри [ и ] можно указать класс эквивалентности equivalence class, используя синтаксис [=c=], который сопоставляет все символы с тем же значением сортировки (как определено текущей локалью), что и символ c.
Внутри [ и ] синтаксис [.symbol.] соответствует сопоставляющему символу symbol.
Если включена опция оболочки extglob с помощью встроенной команды shopt, то оболочка распознает несколько расширенных операторов сопоставления с шаблоном. В следующем описании список шаблонов pattern-list - это список из одного или нескольких шаблонов, разделенных символом |. Составные части могут быть сформированы с использованием одного или нескольких следующих подшаблонов:
- ?(pattern-list)
- Соответствует нулю или одному вхождению заданных шаблонов
- *(pattern-list)
- Соответствует нулю или более вхождений заданных шаблонов
- +(pattern-list)
- Соответствует одному или нескольким вхождениям заданных шаблонов
- @(pattern-list)
- Соответствует одному из заданных шаблонов
- !(pattern-list)
- Соответствует чему угодно, кроме одного из заданных шаблонов
Опция extglob изменяет поведение синтаксического анализатора, поскольку круглые скобки обычно рассматриваются как операторы с синтаксическим значением. Чтобы обеспечить корректный анализ расширенных шаблонов сопоставления, убедитесь, что опция extglob включена перед анализом конструкций, содержащих шаблоны, включая функции оболочки и подстановку команд.
При сопоставлении названий файлов опция оболочки dotglob определяет набор проверяемых названий файлов: когда включена опция dotglob, тогда набор названий файлов включает все файлы, начинающиеся с “.”, кроме “.” и “..” должны соответствовать шаблону или подшаблону, который начинается с точки; когда эта опция отключена, в набор не включаются названия файлов, начинающиеся с “.”, если только шаблон или подшаблон не начинаются с “.”. Как указано выше, “.” имеет особое значение только при совпадении названий файлов.
Сложное расширенное сопоставления с шаблоном с длинными строками выполняется медленно, особенно если шаблоны содержат чередования, а строки содержат множество совпадений. Используйте отдельные совпадения с более короткими строками или используйте массивы строк вместо одной длинной строки.
Удаление кавычки¶
После вышеописанных расширений все не заключенные в кавычки символы \, ' и ", которые не были получены в результате одного из вышеописанных расширений, будут удалены.
ПЕРЕНАПРАВЛЕНИЕ¶
Перед выполнением команды ее ввод и вывод могут быть перенаправлены с использованием специальной нотации, интерпретируемой оболочкой. Перенаправление Redirection позволяет дублировать файловые дескрипторы команд, открывать и закрывать их, указывать на разные файлы и изменять файлы, из которых команда считывает и в которые записывает данные. Перенаправление также может использоваться для изменения файловых дескрипторов в текущей окружающей среде выполнения оболочки. Следующие операторы перенаправления могут предшествовать или отображаться в любом месте простой команды simple command или они могут следовать за командой command. Перенаправления обрабатываются в том порядке, в котором они отображаются, т.е. слева направо.
Каждому перенаправлению, которому может предшествовать номер файлового дескриптора, вместо этого может предшествовать слово вида {varname}. В этом случае для каждого оператора перенаправления, кроме >&- и <&-, оболочка выделит файловый дескриптор, который больше или равен 10 и присвоит ему значение {varname}. Если >&- или <&- предшествует {varname}, то значение {varname} определяет дескриптор файла, который необходимо закрыть. Если указано значение {varname}, то перенаправление сохраняется за пределами действия команды, позволяя программисту оболочки вручную управлять временем жизни файлового дескриптора. Опция оболочки varredir_close управляет этим поведением.
В нижеследующих описаниях, если номер файлового дескриптора опущен, а первым символом оператора перенаправления является <, то перенаправление относится к стандартному вводу (файловый дескриптор 0). Если первым символом оператора перенаправления является >, то перенаправление ссылается на стандартный вывод (файловый дескриптор 1).
Слово, следующее за оператором перенаправления в приведенных ниже описаниях, если не указано иное, может быть расширено фигурными скобками, тильдой, параметрами и переменными, подстановкой команд, арифметическим расширением, удалением кавычек, расширением названия пути и разделением слов. Если оно расширяется более чем на одно слово, то bash сообщает об ошибке.
Примечание. Порядок перенаправлений имеет значение. Например, команда
ls > dirlist 2>&1
перенаправляет как стандартный вывод, так и в стандартную ошибку в файл dirlist, в то время как команда
ls 2>&1 > dirlist
перенаправляет только стандартный вывод в файл dirlist, поскольку стандартная ошибка была продублирована из стандартного вывода до того, как стандартный вывод был перенаправлен в dirlist.
Bash специально обрабатывает несколько названий файлов, когда они используются в перенаправлениях, как описано в следующей таблице. Если операционная система, на которой запущена bash, предоставляет эти специальные файлы, то bash будет использовать их; в противном случае она будет эмулировать их внутренне с помощью поведения, описанного ниже.
- /dev/fd/fd
- Если fd является допустимым целым числом, то файловый дескриптор fd дублируется.
- /dev/stdin
- Файловый дескриптор 0 дублируется.
- /dev/stdout
- Файловый дескриптор 1 дублируется.
- /dev/stderr
- Файловый дескриптор 2 дублируется.
- /dev/tcp/host/port
- Если host - допустимое название хоста или адрес интернет, а port - целочисленный номер порта или название службы, то bash попытается открыть соответствующий сокет TCP.
- /dev/udp/host/port
- Если host - допустимое название хоста или адрес интернет, а port - целочисленный номер порта или название службы, то bash попытается открыть соответствующий сокет UDP.
Сбой при открытии или создании файла приводит к сбою перенаправления.
Перенаправления с использованием файловых дескрипторов, превышающих 9, следует используйте с осторожностью, так как они могут конфликтовать с файловыми дескрипторами, используемыми оболочкой внутри системы.
Обратите внимание, что встроенная команда exec может заставить вступить в силу перенаправления в текущей оболочке.
Перенаправление ввода¶
Перенаправление ввода приводит к тому, что файл, название которого является результатом расширения слова word, открывается для чтения с помощью файлового дескриптора n или стандартного ввода (файловый дескриптор 0), если n не указано.
Общий формат для перенаправления входных данных следующий:
[n]<word
Перенаправление вывода¶
Перенаправление вывода данных приводит к открытию файла, названием которого является результатом расширения слова word, для записи в файловый дескриптор n или в стандартный вывод (файловый дескриптор 1), если n не указано. Если файл не существует, то он создается; если он существует, то он обрезается до нулевого размера.
Общий формат для перенаправления выходных данных следующий:
[n]>word
Если оператором перенаправления является > и включена опция noclobber для встроенной команды set, то перенаправление завершится ошибкой, если файл, название которого является результатом расширения слова word, существует и является обычным файлом. Если оператором перенаправления является >| или оператором перенаправления является >, а опция noclobber для встроенной команды set не включена, то выполняется попытка перенаправления, даже если файл с названием word существует.
Добавление перенаправленных выходных данных¶
Перенаправление выходных данных таким образом приводит к открытию файла, название которого является результатом расширения слова word, для добавления в файловый дескриптор n или в стандартный вывод (файловый дескриптор 1), если n не указано. Если файл не существует, то он будет создан.
Общий формат для добавления выходных данных следующий:
[n]>>word
Перенаправление стандартного вывода и стандартной ошибки¶
Эта конструкция позволяет перенаправлять как стандартный вывод (файловый дескриптор 1), так и стандартный вывод об ошибке (файловый дескриптор 2) в файл, название которого является расширением слова word.
Существует два формата для перенаправления стандартного вывода и стандартной ошибки:
&>word
Из двух форматов предпочтительнее первый. Семантически это эквивалентно
>word 2>&1
При использовании второго формата слово word может не расширяться до числа или -. Если это так, то, по соображениям совместимости, применяются другие операторы перенаправления (смотрите подраздел Дублирование файловых дескрипторов ниже).
Добавление стандартного вывода и стандартной ошибки¶
Эта конструкция позволяет добавлять как стандартный вывод (файловый дескриптор 1), так и стандартный вывод об ошибке (файловый дескриптор 2) в файл, название которого является расширением слова word.
Формат для добавления стандартного вывода и стандартной ошибки следующий:
&>>word
Это семантически эквивалентно
>>word 2>&1
(смотрите подраздел Дублирование файловых дескрипторов ниже).
Здесь документы¶
Этот тип перенаправления предписывает оболочке считывать входные данные из текущего источника до тех пор, пока не будет обнаружена строка, содержащая только разделитель delimiter (без пробелов в конце). Все строки, прочитанные до этого момента, затем используются в качестве стандартного ввода (или файлового дескриптора n, если указано n) для команды.
Формат документов here-documents следующий:
[n]<<[-]word
here-document delimiter
В слове word не выполняется расширение параметров и переменных, подстановка команд, арифметическое расширение или расширение названия пути. Если какая-либо часть слова word заключена в кавычки, то разделитель delimiter является результатом удаления кавычек в слове word, а строки в документе here-document не расширяются. Если слово word не заключено в кавычки, то все строки документа here-document подвергаются расширению параметров, замене команд и арифметическому расширению, последовательность символов \<newline> игнорируется, а \ необходимо использовать для заключения в кавычки символов \, $, and `.
Если оператором перенаправления является <<-, то все начальные символы табуляции удаляются из строк ввода и из строки, содержащей разделитель delimiter. Это позволяет естественным образом использовать отступы в документах here-documents в сценариях оболочки.
Здесь строки¶
Вариант документов "Здесь строки" (Here Strings) имеет следующий формат:
[n]<<<word
Слово word расширяется с помощью тильды, параметров и переменных, подстановки команд, арифметического расширения и удаления кавычек. Расширение названия пути и разделение слов не выполняются. Результат передается в виде отдельной строки с добавлением новой строки к команде при ее стандартном вводе (или файловому дескриптору n, если указано n).
Дублирование файловых дескрипторов¶
Оператор перенаправления
[n]<&word
используется для дублирования входных файловых дескрипторов. Если слово word расширяется до одной или нескольких цифр, то файловый дескриптор, обозначаемый n, становится копией этого файлового дескриптора. Если цифры в слове word не указывают на файловый дескриптор, то при вводе, возникает ошибка перенаправления. Если значение слова word равно -, то файловый дескриптор n закрывается. Если значение n не указано, то используется стандартный ввод (файловый дескриптор 0).
Оператор перенаправления
[n]>&word
используется аналогично для дублирования выходных файловых дескрипторов. Если n не указано, используется стандартный вывод (файловый дескриптор 1). Если цифры в слове word не указывают файловый дескриптор, открытый для вывода, то возникает ошибка перенаправления. Если значение слова word равно -, файловый дескриптор n закрывается. В качестве особого случая, если n опущено, а word не расширяется до одной или нескольких цифр или -, то стандартный вывод и стандартная ошибка перенаправляются, как описано ранее.
Перемещение файловых дескрипторов¶
Оператор перенаправления
[n]<&digit-
перемещает файловый дескриптор со значением digit в файловый дескриптор со значением n или в стандартный ввод (файловый дескриптор 0), если n не указано. Дескриптор со значением digit закрывается после дублирования в n.
Аналогично, оператор перенаправления
[n]>&digit-
перемещает файловый дескриптор со значением digit в файловый дескриптор со значением n или в стандартный вывод (файловый дескриптор 1), если n не указано.
Открытие файловых дескрипторов для чтения и записи¶
Оператор перенаправления
[n]<>word
приводит к открытию файла, название которого является расширением слова word, как для чтения, так и для записи в файловом дескрипторе со значением n или в файловом дескрипторе 0, если n не указано. Если файл не существует, то он создается.
ПСЕВДОНИМЫ¶
Псевдонимы Aliases позволяют заменять слово строкой, когда она используется в качестве первого слова простой команды. Оболочка поддерживает список псевдонимов, которые могут быть установлены и отменены с помощью встроенных команд alias и unalias (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже). Первое слово каждой простой команды, если оно не заключено в кавычки, проверяется на наличие псевдонима. Если это псевдоним, то это слово заменяется текстом псевдонима. Символы /, $, ` и =, а также любые из перечисленных выше метасимволов оболочки metacharacters или символов кавычек могут отсутствовать в псевдониме. Заменяющий текст может содержать любые допустимые входные данные оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на наличие псевдонимов, но слово, идентичное раскрываемому псевдониму, не раскрывается во второй раз. Это означает, что можно, например, заменить ls на ls -F и bash не будет пытаться рекурсивно расширять заменяющий текст. Если последним символом значения псевдонима является пробел blank, то следующее за псевдонимом командное слово также проверяется на расширение псевдонима.
Псевдонимы создаются и выводятся с помощью команды alias, а удаляются с помощью команды unalias.
В заменяющем тексте нет механизма для использования аргументов. Если аргументы необходимы, то используйте функцию оболочки (смотрите раздел ФУНКЦИИ ниже).
Псевдонимы не раскрываются, когда оболочка не является интерактивной, если только опция оболочки expand_aliases не задана с помощью команды shopt (смотрите описание shopt в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).
Правила, касающиеся определения и использования псевдонимов, несколько запутанны. Bash всегда считывает по крайней мере одну полную строку ввода и все строки, которые составляют составную команду, перед выполнением любой из команд в этой строке или составной команды. Псевдонимы расширяются при чтении команды, а не при ее выполнении. Таким образом, определение псевдонима, появляющееся в той же строке, что и другая команда, не вступает в силу до тех пор, пока не будет прочитана следующая строка ввода. Новый псевдоним не повлияет на команды, следующие за определением псевдонима в этой строке. Такое поведение также является проблемой при выполнении функций. Псевдонимы раскрываются при чтении определения функции, а не при выполнении функции, поскольку определение функции само по себе является командой. Как следствие, псевдонимы, определенные в функции, недоступны до тех пор, пока эта функция не будет выполнена. На всякий случай всегда выносите определения псевдонимов в отдельную строку и не используйте команду alias в составных командах.
Почти для всех целей псевдонимы могут быть заменены функциями оболочки.
ФУНКЦИИ¶
Функция оболочки, определенная, как описано выше, в разделе ГРАММАТИКА ОБОЛОЧКИ, хранит последовательность команд для последующего выполнения. Когда название функции оболочки используется в качестве простого названия команды, тогда выполняется список команд, связанных с этим названием функции. Функции выполняются в контексте текущей оболочки; для их интерпретации не создается новый процесс (в отличие от выполнения сценария оболочки). Когда функция выполняется, аргументы функции становятся позиционными параметрами во время ее выполнения. Специальный параметр # обновляется, чтобы отразить это изменение. Специальный параметр 0 остается неизменным. Во время выполнения функции первому элементу переменной FUNCNAME присваивается значение названия функции.
Все остальные аспекты окружающей среды выполнения оболочки идентичны для функции и её вызова, со следующими исключениями: ловушки DEBUG и RETURN не наследуются (смотрите описание встроенной ловушки в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже), если функции не присвоен атрибут trace (смотрите описание встроенной команды declare ниже) или, если не включена опция оболочки -o functrace с помощью встроенной команды set (в этом случае все функции наследуют ловушки DEBUG и RETURN), но ловушка ERR не наследуется, если не включена опция оболочки -o errtrace.
Переменные, локальные для функции, могут быть объявлены с помощью встроенной команды local (локальные переменные local variables). Обычно переменные и их значения совместно используются функцией и вызывающим ее пользователем. Если переменная объявлена как local, то область видимости переменной ограничивается этой функцией и ее дочерними процессами (включая функции, которые она вызывает).
В следующем описании текущая область current scope - это выполняемая в данный момент функция. Предыдущие области состоят из вызывающего эту функцию объекта и так далее, вплоть до "глобальной" области, где оболочка не выполняет никаких функций оболочки. Следовательно, локальная переменная в текущей области видимости - это переменная, объявленная с использованием встроенных команд local или declare в функции, которая выполняется в данный момент.
Локальные переменные это - "теневые" переменные с тем же названием, объявленные в предыдущих областях видимости. Например, локальная переменная, объявленная в функции, скрывает глобальную переменную с таким же названием: ссылки и присвоения ссылаются на локальную переменную, оставляя глобальную переменную неизмененной. Когда функция возвращается, тогда глобальная переменная снова становится видимой.
Оболочка использует динамическую область видимости dynamic scoping для управления видимостью переменной в функциях. При динамической области видимости видимые переменные и их значения являются результатом последовательности вызовов функций, которые привели к выполнению текущей функции. Значение переменной, которое видит функция, зависит от ее значения в вызывающем объекте, если таковое имеется, независимо от того, является ли вызывающий объект "глобальной" областью или другой функцией оболочки. Это также значение, которое "скрывается" (shadows) в объявлении локальной переменной, и значение которое восстанавливается при возврате функции.
Например, если переменная var объявлена как локальная в функции func1, а func1 вызывает другую функцию func2, то ссылки на var, сделанные из func2, будут преобразованы в локальную переменную var из func1, скрывающую любую глобальную переменную с названием var.
Встроенная команда unset также работает, используя ту же динамическую область: если переменная является локальной для текущей области, unset сбросит ее значение; в противном случае значение команды unset будет ссылаться на переменную, найденную в любой вызывающей области так, как описано выше. Если переменная в текущей локальной области не установлена, то она будет оставаться такой (отображаться как команда unset) до тех пор, пока она не будет сброшена в этой области или пока функция не вернется. Как только функция вернется, любой экземпляр переменной в предыдущей области станет видимым. Если команда unset воздействует на переменную в предыдущей области видимости, то любой экземпляр переменной с таким названием, который был скрыт, станет видимым (смотрите ниже, как опция оболочки localvar_unset изменяет это поведение).
Переменная FUNCNEST, если для нее задано числовое значение, превышающее 0, определяет максимальный уровень вложенности функции. Вызовы функций, превышающие этот предел, приводят к прерыванию выполнения всей команды.
Если в функции выполняется встроенная команда return, то функция завершает работу и возобновляет выполнение следующей команды после вызова функции. Любая команда, связанная с ловушкой RETURN, выполняется до возобновления выполнения. Когда функция завершается, значения позиционных параметров и специального параметра # возвращаются к значениям, которые они имели до выполнения функции.
Названия и определения функций могут быть указаны с опцией -f для встроенных команд declare или typeset. При выборе опции -F в качестве declare или typeset будут указаны только названия функций (и, необязательно, исходный файл и номер строки, если включена опция оболочки extdebug). Функции могут быть экспортированы таким образом, чтобы дочерние процессы оболочки (т.е те, которые создаются при выполнении отдельного вызова оболочки) автоматически определяли их с помощью опции -f для встроенной функции export. Определение функции может быть удалено с помощью опции -f для встроенной команды unset.
Функции могут быть рекурсивными. Переменная FUNCNEST может использоваться для ограничения глубины стека вызовов функций и количества вызовов функций. По умолчанию количество рекурсивных вызовов не ограничено.
АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ¶
Оболочка позволяет вычислять арифметические выражения при определенных обстоятельствах (смотрите встроенные команды let и declare, составные команды (( и арифметическое расширение Arithmetic Expansion). Вычисление выполняется в целых числах с фиксированной запятой без проверки на переполнение, хотя деление на 0 перехватывается и помечается как ошибка. Операторы и их приоритет, ассоциативность и значения такие же, как в языке Си. Следующий список операторов сгруппирован по уровням с одинаковым приоритетом. Уровни перечислены в порядке убывания приоритета.
- id++ id--
- переменные значения инкремент и декремент
- - +
- унарный минус и плюс
- ++id --id
- переменный прединкремент и преддекремент
- ! ~
- логическая и побитовая инверсия
- **
- возведение в степень
- * / %
- умножение, деление, остаток
- + -
- сложение, вычитание
- << >>
- побитовые сдвиги влево и вправо
- <= >= < >
- сравнение
- == !=
- равенство и неравенство
- &
- побитовое логическое И
- ^
- побитовое логическое исключающее ИЛИ
- |
- побитовое логическое ИЛИ
- &&
- логическое И
- ||
- логическое ИЛИ
- expr?expr:expr
- оператор ветвления (условие)
- = *= /= %= += -= <<= >>= &= ^= |=
- назначение, распределение
- expr1 , expr2
- запятая
Переменные оболочки допустимы в качестве операндов; расширение параметров выполняется до вычисления выражения. Внутри выражения на переменные оболочки также можно ссылаться по названию, не используя синтаксис расширения параметров. Переменная оболочки, значение которой равно нулю или не задано, принимает значение 0, если на нее ссылаются по названию без использования синтаксиса расширения параметра. Значение переменной вычисляется как арифметическое выражение, когда на нее ссылаются или когда переменной, которой присвоен атрибут integer (целое число) с помощью команды declare -i, присваивается значение. Значение ноль равно 0. Для использования в выражении переменной оболочки необязательно, чтобы ее атрибут integer был включен.
Целочисленные константы соответствуют определению языка Си, без суффиксов или символьных констант. Константы, начинающиеся с 0, интерпретируются как восьмеричные числа. 0x или 0XX обозначают шестнадцатеричные числа. В противном случае числа принимают форму [base#]n, где необязательное base - это десятичное число от 2 до 64, представляющее арифметическое основание системы счисления, а n - значение основания системы счисления. Если основание base# опущено, то используется основание 10. При указании n, если не требуется указывать цифру, цифры больше 9 обозначаются строчными буквами, прописными буквами @ и _ в указанном порядке. Если значение base меньше или равно 36, то строчные и прописные буквы могут использоваться взаимозаменяемо для обозначения чисел от 10 до 35.
Операторы вычисляются в порядке приоритета. Подвыражения в круглых скобках вычисляются первыми и могут переопределять правила приоритета, приведенные выше.
УСЛОВНЫЕ ВЫРАЖЕНИЯ¶
Условные выражения используются составной командой [[ и встроенными командами test и [ для проверки атрибутов файла и выполнения строковых и арифметических сравнений. Команды test и [ определяют свое поведение на основе количества аргументов; смотрите описания этих команд для любых других действий, связанных с командами.
Выражения формируются из следующих унарных или бинарных первичных элементов. Bash специально обрабатывает несколько названий файлов, когда они используются в выражениях. Если операционная система, на которой запущена bash, предоставляет эти специальные файлы, то bash будет использовать их; в противном случае она будет эмулировать их самостоятельно следующим образом: если какой-либо аргумент file для одного из первичных значений имеет вид /dev/fd/n, то проверяется дескриптор файла n. Если в аргументе file первичными являются значения /dev/stdin, /dev/stdout или /dev/stderr, то проверяется дескриптор файла 0, 1 или 2, соответственно.
Если не указано иное, то в первую очередь обрабатываются файлы символических ссылок , при этом обрабатываются адресат ссылки, а не сама ссылка.
При использовании команды [[ операторы < и > выполняют лексикографическую сортировку с использованием текущей локали. Команда test выполняет сортировку с использованием кода ASCII.
- -a file
- Истинно, если файл file существует.
- -b file
- Истинно, если file существует и является блочным специальным файлом.
- -c file
- Истинно, если файл file существует и является специальным символическим файлом.
- -d file
- Истинно, если файл file существует и является каталогом.
- -e file
- Истинно, если файл file существует.
- -f file
- Истинно, если файл file существует и является обычным файлом.
- -g file
- Истинно, если файл file существует и имеет значение set-group-id.
- -h file
- Истинно, если файл file существует и является символической ссылкой.
- -k file
- Истинно, если файл file существует и установлен его бит "sticky".
- -p file
- Истинно, если файл file существует и является именованным каналом (FIFO).
- -r file
- Истинно, если файл file существует и доступен для чтения.
- -s file
- Истинно, если файл file существует и имеет размер больше нуля.
- -t fd
- Истинно, если файловый дескриптор fd открыт и ссылается на терминал.
- -u file
- Истинно, если файл file существует и установлен его бит set-user-id.
- -w file
- Истинно, если файл file существует и доступен для записи.
- -x file
- Истинно, если файл file существует и является исполняемым.
- -G file
- Истинно, если файл file существует и имеет эффективный идентификатор группы.
- -L file
- Истинно, если файл file существует и является символической ссылкой.
- -N file
- Истинно, если файл file существует и был изменен с момента последнего чтения.
- -O file
- Истинно, если файл file существует и имеет эффективный идентификатор пользователя.
- -S file
- Истинно, если файл file существует и является сокетом.
- file1 -ef file2
- Истинно, если файлы file1 и file2 ссылаются на одно и то же устройство и инод.
- file1 -nt file2
- Истинно, если файл file1 более новый (в соответствии с датой изменения), чем файл file2 или если файл file1 существует, а файл file2 не существует.
- file1 -ot file2
- Истинно, если файл file1 старше, чем файл file2 или если файл file2 существует, а файл file1 не существует.
- -o optname
- Истинно, если включена опция оболочки optname. Смотрите список опций в описании опции -o для встроенной команды set ниже.
- -v varname
- Истинно, если установлена переменная оболочки varname (ей присвоено значение).
- -R varname
- Истинно, если установлена переменная оболочки varname, которая является ссылкой на название.
- -z string
- Истинно, если длина строки string равна нулю.
- string
- -n string
- Истинно, если длина string отлична от нуля.
- string1 == string2
- string1 = string2
- Истинно, если строки равны. = следует использовать с командой test для соответствия POSIX. При использовании с командой [[ выполняется сопоставление с шаблоном, как описано выше в подразделе Составные команды.
- string1 != string2
- Истинно, если строки не равны.
- string1 < string2
- Истинно, если строка string1 лексикографически сортируется перед строкой string2.
- string1 > string2
- Истинно, если строка string1 сортируется лексикографически после строки string2.
- arg1 OP arg2
- OP является одним из -eq, -ne, -lt, -le, -gt или -ge. Эти арифметические двоичные операторы возвращают значение true (истинно), если значение arg1 равно, не равно, меньше, меньше или равно, больше или больше, чем значение arg2, соответственно. Arg1 и arg2 могут быть положительными или отрицательными целыми числами. При использовании с командой [[ значения Arg1 и Arg2 вычисляются как арифметические выражения (смотрите раздел АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ выше).
ПРОСТОЕ РАСШИРЕНИЕ КОМАНДЫ¶
При выполнении простой команды оболочка выполняет следующие расширения, назначения и перенаправления, слева направо в следующем порядке.
- 1.
- Слова, которые синтаксический анализатор пометил как присвоения переменным (т.е. то, что предшествуют названию команды) и перенаправления, сохраняются для последующей обработки.
- 2.
- Слова, которые не являются назначениями переменных или перенаправлениями, раскрываются. Если после расширения остаются какие-либо слова, то первое слово принимается за название команды, а остальные слова - за аргументы.
- 3.
- Перенаправления выполняются так, как описано выше, в разделе ПЕРЕНАПРАВЛЕНИЕ.
- 4.
- Текст после символа = в каждом присвоении переменной подвергается расширению тильдой, расширению параметров, подстановке команд, арифметическому расширению и удалению кавычек, прежде чем быть присвоенным переменной.
Если в результат команды по присвоению переменных не оказывает влияния на окружающую среду оболочки. В случае такой команды (которая состоит только из присваиваний и перенаправлений) присваивания выполняются перед перенаправлениями. В противном случае переменные добавляются в окружающую среду команды и не влияют на текущую среду оболочки. Если при любом назначении будет предпринята попытка присвоить значение переменной, доступной только для чтения, то возникает ошибка и команда завершает работу с ненулевым статусом.
Если в результате данной команды выполняется перенаправление, то оно не влияет на текущую окружающую среду оболочки. Ошибка перенаправления приводит к завершению выполнения команды с ненулевым статусом.
Если после расширения осталось название команды, выполнение продолжается, как описано ниже. В противном случае команда завершается. Если одно из расширений содержало подстановку команды, то статус завершения команды соответствует статусу завершения последней выполненной подставленной команды. Если подстановки команд не было, то команда завершает работу с нулевым статусом.
ВЫПОЛНЕНИЕ КОМАНДЫ¶
После разбиения команды на слова, если в результате получается простая команда и необязательный список аргументов, то выполняются следующие действия.
Если команда не содержит косых черт, то оболочка пытается найти их. Если существует функция оболочки с таким названием, то эта функция вызывается, как описано выше в разделе ФУНКЦИИ. Если название функции не совпадает, то оболочка выполняет поиск функции в списке встроенных функций оболочки. Если найдено совпадение, то вызывается эта встроенная функция.
Если название не является ни функцией оболочки, ни встроенной командой и не содержит косых черт, то bash выполняет поиск в каждом элементе PATH каталога, содержащего исполняемый файл с таким названием. Bash использует хэш-таблицу для запоминания полных путей к исполняемым файлам (смотрите hash в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже). Полный поиск по каталогам в PATH выполняется только в том случае, если команда не найдена в хэш-таблице. Если поиск не увенчался успехом, то оболочка выполняет поиск определенной функции оболочки с названием command_not_found_handle. Если эта функция существует, то она вызывается в отдельной окружающей среде выполнения с исходной командой и аргументами исходной команды в качестве аргументов, и статус завершения функции становится статусом завершения этой подоболочки. Если эта функция не определена, то оболочка выводит сообщение об ошибке и возвращает статус завершения, равный 127.
Если поиск завершен успешно или если название команды содержит одну или несколько косых черт, то оболочка запускает названную программу в отдельной окружающей среде выполнения. В качестве аргумента 0 присваивается данное название, а остальные аргументы команды присваиваются заданным аргументам, если таковые имеются.
Если это выполнение завершается неудачей из-за того, что файл не имеет исполняемого формата и не является каталогом, то предполагается, что это сценарий оболочки shell script, файл, содержащий команды оболочки, и оболочка создает новую подоболочку для его выполнения. Эта подоболочка повторно инициализирует саму себя, таким образом, как если бы для обработки сценария была вызвана новая оболочка, за исключением того, что расположение команд, запомненных родительской оболочкой сохраняется дочерней оболочкой (смотрите хэш ниже в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ).
Если программа представляет собой файл, начинающийся с #!, то в оставшейся части первой строки указывает интерпретатор для программы. Оболочка выполняет указанный интерпретатор в операционных системах, которые сами не обрабатывают этот исполняемый формат. Аргументы интерпретатора состоят из одного необязательного аргумента, следующего за названием интерпретатора в первой строке программы, за которым следует название программы, а затем аргументы команды, если таковые имеются.
ОКРУЖАЮЩАЯ СРЕДА ВЫПОЛНЕНИЯ КОМАНД¶
Оболочка имеет окружающую среду execution environment, которая сдержит следующее:
- открывать файлы, унаследованные оболочкой при вызове, измененные с помощью перенаправлений, переданных во встроенную команду exec
- текущего рабочего каталога, заданного cd, pushd или popd или унаследованного оболочкой при вызове
- с маской режима создания файла заданного umask или наследуемого от родительской оболочки
- текущие ловушки, установленные trap
- параметры оболочки, которые задаются с помощью присваивания переменной или с помощью команды set или наследуются от родительской оболочки в среде
- функции оболочки, определенные во время выполнения или унаследованные от родительской оболочки в окружающей среде
- опции, включаемые при вызове (либо по умолчанию, либо с помощью аргументов командной строки), либо с помощью команды set
- опции, включенные с помощью команды shopt
- псевдонимы оболочки, определенные с помощью команды alias
- различные идентификаторы процессов, включая идентификаторы фоновых заданий, значение $$ и значение PPID
Когда требуется выполнить простую команду, отличную от встроенной или функции оболочки, то она вызывается в отдельной окружающей среде, которая состоит из следующего. Если не указано иное, то значения наследуются из оболочки.
- открытые файлы оболочки, а также любые изменения и дополнения, указанные при перенаправлении в команду
- текущий рабочий каталог
- маска режима создания файла
- переменные и функции оболочки, помеченные для экспорта, а также переменные, экспортируемые для команды, передаваемые в окружающую среду
- ловушки, перехваченные оболочкой, сбрасываются до значений, унаследованных от родительской оболочки, а ловушки, проигнорированные оболочкой, игнорируются
Команда, вызванная в этой отдельной окружающей среде, не может повлиять на среду выполнения оболочки.
Подоболочка subshell - это копия процесса оболочки.
Подстановка команд, команды, сгруппированные в круглые скобки и асинхронные команды вызываются в среде подоболочки, которая является дубликатом среды оболочки, за исключением того, что ловушки, захваченные оболочкой, сбрасываются до значений, которые оболочка унаследовала от своего родительского элемента при вызове. Встроенные команды, которые вызываются как часть конвейера, также выполняются в среде подоболочки. Изменения, внесенные в окружающую среду подоболочки, не могут повлиять на окружающую среду оболочки.
Вложенные оболочки, созданные для выполнения подстановки команд, наследуют значение опции -e от родительской оболочки. Если опция -e не находится в режиме posix mode, то bash удаляет опцию -e в таких вложенных оболочках.
Если за командой следует & и управление заданием не активировано, то стандартным вводом по умолчанию для команды является пустой файл /dev/null. В противном случае вызываемая команда наследует файловые дескрипторы вызывающей оболочки, измененные в результате перенаправления.
СРЕДА ОКРУЖЕНИЯ¶
При вызове программы ей выдается массив строк, называемый окружающей средой environment. Это список пар name-value в формате name=value.
Оболочка предоставляет несколько способов управления окружающей средой. При вызове оболочка просматривает свою собственную окружающую среду и создает параметр для каждого найденного названия, автоматически помечая его для использования в дочерних процессах. Выполняемые команды наследуют окружающую среду. Команды export и declare -x позволяют добавлять параметры и функции в окружающую среду и удалять их из нее. Если значение параметра в окружающей среде изменяется,то новое значение становится частью окружающей среды, заменяя старое. Окружающая среда, наследуемая любой выполняемой командой, состоит из начальной среды оболочки, значения которой могут быть изменены оболочкой, за вычетом любых пар, удаленных командой unset, плюс любых дополнений с помощью команд export и declare -x.
Окружающая среда любой простой команды simple command или функции может быть временно расширена путем добавления к ней префикса с назначением параметров, как описано выше в разделе ПАРАМЕТРЫ. Эти назначения влияют только на окружающую среду, видимую этой командой.
Если задана опция -k (смотрите встроенную команду set ниже), то в окружающую среду для команды помещаются все параметры, а не только те, которые предшествуют названию команды.
Когда оболочка bash вызывает внешнюю команду, то переменной _ присваивается полное название файла команды и передается этой команде в её окружающей среде.
КОД ЗАВЕРШЕНИЯ¶
Статус выхода выполняемой команды - это значение, возвращаемое системным вызовом waitpid или эквивалентной функцией. Статусы выхода (завершения) находятся в диапазоне от 0 до 255, хотя, как объясняется ниже, оболочка может специально использовать значения выше 125. Статусы завершения работы встроенных команд оболочки и составных команд также ограничены этим диапазоном. При определенных обстоятельствах оболочка будет использовать специальные значения для указания конкретных режимов ошибок.
Команда собственно оболочки, которая завершается с нулевым статусом завершения, была выполнена успешно. Нулевой статус завершения указывает на успех. Ненулевой статус завершения указывает на ошибку. Когда команда завершается по фатальному сигналу N, тогда bash использует значение 128+N в качестве статуса завершения.
Если команда не найдена, то дочерний процесс, созданный для ее выполнения, возвращает статус 127. Если команда найдена, но не может быть выполнена, возвращается статус 126.
Если команда не выполняется из-за ошибки во время расширения или перенаправления, то статус завершения больше нуля.
Встроенные команды оболочки возвращают статус 0 (true) в случае успешного выполнения и ненулевое значение (false), если во время их выполнения возникает ошибка. Все встроенные команды возвращают статус завершения, равный 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.
Если для опции оболочки huponexit задано значение shopt, то bash отправляет сообщение SIGHUP всем заданиям при выходе из интерактивного режима.
Если bash ожидает завершения команды и получает сигнал, для которого был установлен перехватчик, то перехват не будет выполнен до тех пор, пока команда не будет завершена. Когда bash ожидает, для асинхронной команды, сигнал от встроенной команды wait, то прием сигнала, для которого был установлен перехватчик, приведет к немедленному завершению встроенной команды wait со статусом выхода, более 128, сразу после этого будет выполнен перехват.
Когда управление заданиями не включено и bash интерактивна и ожидает завершения команды, тогда получает сигналы, от клавиатуры, такие как SIGINT (обычно генерируемые ^C), которые пользователи обычно намереваются отправить этой команде. Это происходит потому, что оболочка и команда находятся в той же группе процессов, что и терминал и ^C отправляет SIGINT всем процессам в этой группе процессов.
Когда bash запущена с выключенным управлением заданиями и получает SIGINT во время ожидания команды в интерактивном режиме, то она ожидает завершения выполнения этой команды интерактивного режима, а затем решает, что делать с сигналом SIGINT:
- 1.
- Если команда завершается по сигналу SIGINT, то bash делает вывод, что пользователь намеревался завершить весь сценарий и выполняет сигнал SIGINT (например, запуская перехватчик SIGINT или завершает работу самостоятельно);
- 2.
- Если команда не завершается по сигналу SIGINT, то программа сама обрабатывает сигнал SIGINT и не рассматривает этот сигнал как фатальный. В этом случае bash также не рассматривает сигнал SIGINT как фатальный, а вместо этого предполагает, что сигнал SIGINT использовался как часть нормальной работы программы (например, редактор emacs использует его для отмены команд редактирования) или отвергнутый намеренно. Однако, bash, для обеспечения совместимости, запустит любой перехватчик, установленный для сигнала SIGINT, как это осуществляется применительно к любому другому перехватываемому сигналу, который она получает, ожидая завершения команды интерактивного режима.
УПРАВЛЕНИЕ ЗАДАНИЯМИ¶
Управление заданиями Job control означает возможность выборочно останавливать (приостанавливать, suspend) выполнение процессов и продолжать (resume) их выполнение позже. Пользователь обычно использует это средство с помощью интерактивного интерфейса, предоставляемого, совместно, драйвером терминала ядра операционной системы и bash.
Оболочка связывает задание job с каждым конвейером. Она хранит таблицу выполняемых в данный момент заданий, которые могут быть показаны с помощью команды jobs. Когда bash запускает задание асинхронно (в фоновом режиме background), то она выводит строку, которая выглядит следующим образом:
[1] 25647
это указывает, что данное задание имеет номер задания 1 и что идентификатор последнего процесса в конвейере, связанного с этим заданием, равен 25647. Все процессы в одном конвейере являются участниками одного задания. Bash использует абстракцию job в качестве основы для управления заданиями.
Чтобы облегчить реализацию пользовательского интерфейса для управления заданиями, операционная система поддерживает нотацию "идентификатор текущей группы процессов терминала"- current terminal process group ID . Члены этой группы процессов (процессы, идентификатор группы процессов которых равен текущему идентификатору группы терминальных процессов) получают генерируемые клавиатурой сигналы, такие как SIGINT. Эти процессы, как говорят, находятся на "переднем плане" - foreground. Фоновые (Background) процессы - это те, чей идентификатор группы процессов отличается от идентификатора терминала; такие процессы невосприимчивы к сигналам клавиатуры. Только процессам переднего плана разрешено выполнять чтение с терминала или, если пользователь укажет это с помощью сигнала stty tostop, то запись на терминал. Фоновые процессы, которые пытаются выполнить чтение с терминала (запись в него, когда действует stty tostop), получают сигнал SIGTTIN (SIGTTOU) от драйвера терминала ядра, который, если его не перехватить, приостанавливает процесс.
Если операционная система, в которой запущена оболочка bash, поддерживает управление заданиями, то bash содержит средства для его использования. Ввод символа suspend (приостановка, обычно ^Z, Control-Z) во время выполнения процесса приводит к остановке этого процесса и возвращает управление bash. Ввод символов delayed suspend (отложенная приостановка, обычно ^Y, Control-Y) приводит к остановке процесса при попытке считывания входных данных с терминала и возврату управления к bash. Затем пользователь может управлять состоянием этого задания, используя команду bg, чтобы продолжить его в фоновом режиме, команду fg, чтобы продолжить его на переднем плане или команду kill, чтобы завершить его. Набор символов ^Z вступает в силу немедленно и имеет дополнительный побочный эффект, заключающийся в том, что ожидающий вывод и вводимый заголовок отбрасываются.
Существует несколько способов указать задание в командной строке. Символ % указывает спецификацию задания (jobspec). Номер задания n может быть обозначен как %n. Для ссылки на задание также может использоваться префикс названия, используемого для его запуска или подстрока, которая отображается в его командной строке. Например, %ce относится к остановленному заданию, название команды которого начинается с ce. Если префикс соответствует более чем одному заданию, то bash сообщает об ошибке. С другой стороны, использование %?ce относится к любому заданию, содержащему строку ce в командной строке. Если подстрока совпадает с несколькими заданиями, bash сообщает об ошибке. Символы %% и %+ относятся к представлению оболочки о текущем задании current job, которая является последним заданием, остановленным, когда оно было на переднем плане или запущено в фоновом режиме. На предыдущее задание previous job можно ссылаться с помощью %-. Если существует только одно задание, то для ссылки на это задание можно использовать как %+, так и %-. В выходных данных, относящихся к заданиям (например, в выходных данных команды jobs), текущее задание всегда помечается знаком +, а предыдущее задание - знаком -. Один символ процента (без сопроводительного описания задания) также относится к текущему заданию.
Простое присвоение названия заданию может быть использовано для того, чтобы вывести его на передний план: %1 является синонимом `fg% 1", выводя задание 1 из фонового режима на передний план. Аналогично, `%1 &" возобновляет выполнение задания 1 в фоновом режиме, что эквивалентно `bg% 1".
Оболочка немедленно узнает об изменении состояния задания. Обычно bash ожидает, пока не появится запрос на вывод, прежде чем сообщать об изменениях в статусе задания, чтобы не прерывать вывод других данных. Если опция -b для встроенной команды set включена, то bash немедленно сообщает о таких изменениях. Любая ошибка в сигнале SIGCHLD выполняется для каждого существующего дочернего процесса.
Если попытка выхода из оболочки bash выполняется во время остановки заданий (или, если опция оболочки checkjobs была включена с помощью встроенной команды shopt), то оболочка выводит предупреждающее сообщение и, если опция checkjobs включена, то выводит список заданий и их статусы. Затем можно использовать команду jobs для проверки их статуса. Если вторая попытка выхода выполняется без промежуточной команды, то оболочка не выводит другое предупреждение, а все остановлеемые задания завершаются.
Когда оболочка ожидает задание или процесс, используя встроенную команду wait, а управление заданием включено, тогда команда wait возвращается при изменении состояния задания. Опция -f заставляет команду wait ожидать завершения задания или процесса перед возвратом.
ПОДСКАЗКИ¶
При выполнении в интерактивном режиме bash отображает основное приглашение PS1, когда она готова прочитать команду и дополнительное приглашение PS2, когда требуется дополнительный ввод для завершения команды. Bash отображает PS0 после считывания команды, но перед её выполнением. Bash отображает PS4, как описано выше, перед отслеживанием каждой команды, когда включена опция -x. Bash позволяет настраивать эти строки запроса, вставляя несколько специальных символов, экранированных обратной косой чертой, которые расшифровываются следующим образом:
- \a
- символ колокольчика в формате ASCII (07)
- \d
- дата в формате "Сутки недели, месяц", например, "Вторник, 26 мая" - "Weekday Month Date" format, e.g., "Tue May 26"
- \D{format}
- значение format передается в strftime(3), а результат вставляется в строку запроса; пустая строка format приводит к представлению времени, зависящему от локали. Фигурные скобки обязательны
- \e
- экранирующий символ ASCII (033)
- \h
- название хоста, начинающееся с `.'
- \H
- название хоста
- \j
- количество заданий, которыми в данный момент управляет оболочка
- \l
- основное название терминального устройства оболочки
- \n
- newline
- \r
- возврат каретки
- \s
- название оболочки, основное название $0 (часть, следующая за последней косой чертой)
- \t
- текущее время в 24-часовом формате ЧЧ:ММ:СС
- \T
- текущее время в 12-часовом формате ЧЧ:ММ:СС
- \@
- текущее время в 12-часовом формате am/pm (до полудня/после полудня)
- \A
- текущее время в 24-часовом формате ЧЧ:ММ
- \u
- название текущего пользователя
- \v
- версию bash (например, 2.00)
- \V
- выпуск bash, версия + уровень исправления (например, 2.00.0)
- \w
- значение переменной оболочки PWD ($PWD), где $HOME обозначается тильдой (используется значение переменной PROMPT_DIRTRIM)
- \W
- основное название $PWD, где $HOME сокращается с помощью тильды
- \!
- исторический номер этой команды
- \#
- номер этой команды
- \$
- если эффективный UID равен 0, то #, иначе $
- \nnn
- символ, соответствующий восьмеричному числу nnn
- \\
- обратная косая черта
- \[
- начинать с последовательности непечатаемых символов, которая может быть использована для встраивания последовательности управления терминалом в приглашение
- \]
- завершение последовательности непечатаемых символов
Номер команды и номер истории команды обычно различаются: номер истории команды - это ее позиция в списке истории, который может включать команды, восстановленные из файла истории (смотрите раздел ИСТОРИЯ ниже), в то время как номер команды - это позиция в последовательности команд выполняемых во время текущего сеанса оболочки. После того, как строка расшифрована, она расширяется с помощью расширения параметров, подстановки команд, арифметического расширения и удаления кавычек, в зависимости от значения опции оболочки promptvars (смотрите описание команды shopt в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).. Это может иметь нежелательные побочные эффекты, если экранированные части строки представляются внутри командной строки или содержат символы, специальные для расширения слова.
БИБЛИОТЕКА READLINE¶
Это библиотека, которая обрабатывает вводимые строки при использовании интерактивной оболочки, если только при вызове оболочки не указана опция --noediting. Редактирование строк также используется при использовании опции -e для встроенной команды read. По умолчанию команды редактирования строк аналогичны командам Emacs. Также доступен интерфейс редактирования строк в стиле vi. Редактирование строк можно включить в любое время, используя опции -o emacs или -o vi для встроенной команды set (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже). Чтобы отключить редактирование строк после запуска оболочки, используйте опции +o emacs или +o vi для встроенной команды set.
Формат библиотеки Readline¶
В этом разделе для обозначения нажатий клавиш используется запись в стиле Emacs. Управляющие клавиши обозначаются C-key (клавиша), например, C-n означает Control-N. Аналогично, meta означает M-key, поэтому M-x означает Мета-X (на клавиатурах без клавиши meta M-x означает ESC x, то есть нажмите клавишу Escape, а затем клавишу x). Таким образом, ESC становится префиксом meta. Комбинация M-C-x означает ESC-Control-x или нажмите клавишу Escape, затем удерживайте клавишу Control, одновременно нажимая клавишу x.)
Командам библиотеки Readline могут присваиваться числовые аргументы arguments, которые обычно используются для подсчета повторений. Однако иногда важен сам знак аргумента. Передача отрицательного аргумента команде, которая действует в прямом направлении (например, kill-line (строка завершения)), приводит к тому, что эта же команда действует в обратном направлении. Ниже приведены команды, поведение которых с аргументами отличается от этого.
Когда команда описывается как "удаляющая текст" killing, тогда удалённый текст изымается и сохраняется для возможного использования в будущем (при "выдёргивании" yanking). Удаленный текст сохраняется в кольце удаления kill ring. При последовательном удалении текст собирается в один блок, который можно удалить сразу. Команды, которые не удаляют текст, разделяют фрагменты текста в кольце удаления.
Инициализация библиотеки Readline¶
Библиотека Readline настраивается путем ввода команд в файл инициализации (файл inputrc). Название этого файла берется из значения переменной INPUTRC. Если эта переменная не задана, то по умолчанию используется значение ~/.inputrc. Если этот файл не существует или не может быть прочитан, то по умолчанию используется значение /etc/inputrc. При запуске программы, использующей библиотеку Readline, считывается файл инициализации и устанавливаются привязки клавиш и переменных. В файле инициализации Readline разрешено использовать только несколько основных конструкций. Пустые строки игнорируются. Строки, начинающиеся с #, являются комментариями. Строки, начинающиеся с $, обозначают условные конструкции. Остальные строки обозначают привязки клавиш и настройки переменных.
Настройки клавиш по умолчанию могут быть изменены с помощью файла inputrc. Другие программы, использующие эту библиотеку, могут добавлять свои собственные команды и настройки.
Например, размещение
M-Control-u: универсальный аргумент
Распознаются следующие названия: RUBOUT, DEL, ESC, LFD, NEWLINE, RET, RETURN, SPC, SPACE и TAB.
В дополнение к названиям команд, readline позволяет привязывать клавиши к строке, которая вставляется при нажатии клавиши (macro).
Привязки клавиш библиотеки Readline¶
Синтаксис для управления привязками клавиш в файле inputrc прост. Все, что требуется, - это название команды или текст макроса и последовательность клавиш, к которой он должен быть привязан. Название может быть задано одним из двух способов: 1) как символьное название клавиши, возможно, с префиксами Meta- или Control- или 2) как последовательность клавиш.
При использовании формы keyname:function-name или macro, keyname - это название клавиши на английском языке. Например:
Meta-Rubout: backward-kill-word
Control-o: "> output"
В приведенном выше примере C-u привязана к функции universal-argument, M-DEL привязана к функции backward-kill-word, а C-o привязана к запуску макроса, выраженного с правой стороны (то есть для вставки текста ``> output'' в строку).
Во второй форме, "keyseq":function-name или macro, keyseq в отличие от, приведенного выше keyname, строки, обозначающие всю последовательность клавиш, могут быть указаны путем заключения последовательности в двойные кавычки. Можно использовать некоторые экранирующие клавиши в стиле GNU Emacs, как в следующем примере, но символьные названия не распознаются.
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1"
В этом примере C-u снова привязана к функции universal-argument. C-x C-r привязана к функции re-read-init-file, а ESC [ 1 1 ~ привязана к вставке текста ``Function Key 1''.
Полный набор escape-последовательностей в стиле GNU Emacs представлен следующим образом
В дополнение к экранирующим последовательностям в стиле GNU Emacs доступен второй набор экранирующих символов с обратной косой чертой:
- \a
- сигнал тревоги (сирена)
- \b
- возврат на один символ
- \d
- delete
- \f
- новая страница
- \n
- newline
- \r
- возврат каретки
- \t
- горизонтальная табуляция
- \v
- вертикальная табуляция
- \nnn
- восьмибитный символ, значение которого является восьмеричным nnn (от одной до трех цифр)
- \xHH
- восьмибитный символ, значением которого является шестнадцатеричное значение HH (одна или две шестнадцатеричные цифры)
При вводе текста макроса необходимо использовать одинарные или двойные кавычки для указания определения макроса. Предполагается, что текст без кавычек является названием функции. В теле макроса описанные выше экранирующие символы обратной косой черты расширены. Обратная косая черта будет заключать в кавычки любой другой символ в тексте макроса, включая " и '.
Bash позволяет отображать или изменять текущие привязки клавиш readline с помощью встроенной команды bind. Режим редактирования может быть переключен во время интерактивного использования с помощью опции -o на встроенную команду set (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже).
Переменные Readline¶
В Readline есть переменные, которые можно использовать для дальнейшей настройки её поведения. Переменная может быть задана в файле inputrc с помощью инструкции вида
set variable-name value
За исключением случаев, когда это указано, переменные могут принимать значения On или Off (без учета регистра). Нераспознанные названия переменных игнорируются. При считывании значения переменной пустые или нулевые значения "on" (без учета регистра) и "1" эквивалентны On. Все остальные значения эквивалентны Off. Переменные и их значения по умолчанию следующие:
- active-region-start-color
- Строковая переменная, которая управляет цветом текста и фоном при отображении текста в активной области (смотрите описание enable-active-region ниже). Эта строка не должна занимать никаких физических позиций символов при вводе, поэтому она должна состоять только из терминальных последовательностей escape. Она выводится на терминал перед отображением текста в активной области. Значение этой переменной возвращается к значению по умолчанию при каждом изменении типа терминала. Значение по умолчанию - это строка, которая переводит терминал в режим ожидания, как указано в описании терминала terminfo. Примерным значением может быть "\e[01;33m".
- active-region-end-color
- Строковая переменная, которая "отменяет" эффект active-region-start-color (начальный цвет в активной области) и восстанавливает "обычный" вид дисплея терминала после отображения текста в активной области. Эта строка не должна занимать никаких физических позиций символов при вводе, поэтому она должна состоять только из последовательностей escape терминала. Она выводится на терминал после отображения текста в активной области. Значение этой переменной возвращается к значению по умолчанию при изменении типа терминала. Значением по умолчанию является строка, которая выводит терминал из режима ожидания, как указано в описании терминала. Примерным значением может быть "\e[0m".
- bell-style (audible)
- Управляет тем, что происходит, когда библиотека readline хочет вызвать колокольчик терминала. Если установлено значение none, то библиотека readline никогда не вызовет колокольчик. Если установлено значение visible, то readline использует видимый колокольчик, если он доступен. Если установлено значение audible, то библиотека readline попытается вызвать звонок терминала.
- bind-tty-special-chars (On)
- Если установлено значение On, то библиотека readline пытается привязать управляющие символы, специально обрабатываемые драйвером терминала ядра, к их эквивалентам в библиотеке readline.
- blink-matching-paren (Off)
- Если установлено значение On, то readline попытается ненадолго переместить курсор на открывающую скобку, когда вставлена закрывающая скобка.
- colored-completion-prefix (Off)
- Если задано значение On, то при выводе списка, в конце, readline отображает общий префикс набора возможных окончаний, используя другой цвет. Определения цвета берутся из значения переменной окружения LS_COLORS. Если в LS_COLORS есть определение цвета для пользовательского суффикса "readline-colored-completion-prefix", то readline использует этот цвет для общего префикса вместо его значения по умолчанию.
- colored-stats (Off)
- Если задано значение On, то readline отображает возможные окончания, используя разные цвета, чтобы указать, с их помощью, на тип файла. Определения цвета берутся из значения переменной окружающей среды LS_COLORS.
- comment-begin (“#”)
- Строка, которая вставляется при выполнении команды readline insert-comment. Эта команда привязана к M-# в режиме emacs и к # в командном режиме редактора vi.
- completion-display-width (-1)
- Количество столбцов экрана, используемых для отображения возможных совпадений при выполнении завершения. Значение игнорируется, если оно меньше 0 или больше ширины экрана терминала. При значении 0 совпадения будут отображаться по одному в строке. Значение по умолчанию равно -1.
- completion-ignore-case (Off)
- Если установлено значение On, то readline выполняет сопоставление названий файлов и завершений без учета регистра.
- completion-map-case (Off)
- Если задано значение On и включено completion-ignore-case, то readline рассматривает дефисы (-) и подчеркивания (_) как эквивалентные при сопоставлении названий файлов и завершений без учета регистра.
- completion-prefix-display-length (0)
- Длина в символах общего префикса в списке возможных доработок, который отображается без изменений. Если задано значение, превышающее ноль, то при отображении возможных доработок общие префиксы, длина которых превышает это значение, заменяются многоточием.
- completion-query-items (100)
- Это определяет, когда пользователь запрашивает просмотр количества возможных завершенй, сгенерированных командой possible-completions. Может быть установлено любое целое значение, большее или равное нулю. Если количество возможных завершений больше или равно значению этой переменной, то readline спросит, желает ли пользователь просмотреть их; в противном случае они просто отображаются в терминале. Нулевое значение означает, что библиотека readline никогда не должна задавать этот вопрос; отрицательные значения рассматриваются как ноль.
- convert-meta (On)
- Если установлено значение On, readline преобразует символы с установленным восьмым битом в последовательность клавиш ASCII, удаляя восьмой бит и добавляя в качестве префикса символ escape (по сути, используя escape в качестве meta prefix). Значение по умолчанию - On, но readline установит его на Off, если локаль содержит восьмибитные символы. Эта переменная зависит от категории локали стандарта LC_CTYPE и может измениться при изменении локали.
- disable-completion (Off)
- Если установлено значение On, то readline будет препятствовать завершению слова. Символы завершения будут вставлены в строку так, как если бы они были сопоставлены с self-insert.
- echo-control-characters (On)
- Если установлено значение On, то в операционных системах, которые указывают, что они его поддерживают, readline отображает символ, соответствующий сигналу, генерируемому с клавиатуры.
- editing-mode (emacs)
- Определяет, начинается ли строка readline с набора привязок клавиш, аналогичных редакторам Emacs или vi. Режим редактирования editing-modeможет быть установлен либо в emacs либо vi.
- emacs-mode-string (@)
- Если включена переменная show-mode-in-prompt, то эта строка отображается непосредственно перед последней строкой основного приглашения, когда включен режим редактирования emacs. Значение раскрывается как привязка к клавише, поэтому доступен стандартный набор мета- и управляющих префиксов, а также последовательностей escape с обратной косой чертой. Используйте экранирующие символы \1 и \2 для начала и окончания последовательности непечатаемых символов, которые могут быть использованы для встраивания последовательности управления терминалом в строку режима.
- enable-active-region (On)
- Здесь точка, point - это текущее положение курсора, а метка markотносится к сохраненному положению курсора. Текст между точкой и меткой называется область region. Когда для этой переменной задано значение On, то readline позволяет определенным командам обозначать область как активную, active. Когда область активна, тогда readline выделяет текст в этой области, используя значение active-region-start-color, которое по умолчанию равно строке, включающей режим выделения терминала. В активной области отображается текст, вставленный с помощью вставки в квадратных скобках, и любой соответствующий текст, найденный с помощью инкрементального и не инкрементального поиска по истории.
- enable-bracketed-paste (On)
- Если установлено значение On, то readline настраивает терминал на вставку каждой вставки в буфер редактирования в виде отдельной строки символов, вместо того чтобы обрабатывать каждый символ так, как если бы он был прочитан с клавиатуры. Это предотвращает выполнение readline любых команд редактирования, привязанных к последовательностям от клавиш, появляющимся во вставленном тексте.
- enable-keypad (Off)
- Если установлено значение On, то readline попытается включить клавиатуру приложения при её вызове. В некоторых системах это необходимо для включения клавиш со стрелками.
- enable-meta-key (On)
- Если установлено значение On, то readline попытается включить любую мета-клавишу модификатора, которая, как утверждается, поддерживается терминалом при его вызове. На многих терминалах мета-клавиша используется для отправки восьмибитных символов.
- expand-tilde (Off)
- Если установлено значение On, то расширение тильды выполняется при попытке readline завершить слово.
- history-preserve-point (Off)
- Если установлено значение On, то код истории пытается поместить точку в одно и то же место в каждой строке истории, полученной с помощью previous-history или next-history.
- history-size (unset)
- Задает максимальное количество записей истории, сохраняемых в списке истории. Если задано нулевое значение, то все существующие записи истории удаляются, а новые записи не сохраняются. Если задано значение меньше нуля, то количество записей истории не ограничено. По умолчанию для количества записей истории задано значение переменной оболочки HISTSIZE. Если будет предпринята попытка присвоить history-size не числовое значение, то максимальное количество записей истории будет равно 500.
- horizontal-scroll-mode (Off)
- Если установлено значение On, тогда readline использует для отображения одну строку, прокручивая вводимые данные по горизонтали на одной строке экрана, когда их длина становится больше ширины экрана, вместо того, чтобы переходить на новую строку. Эта настройка автоматически включается для терминалов высотой 1.
- input-meta (Off)
- Если установлено значение On, то readline разрешит восьмибитный ввод (то есть не будет удалять восьмой бит из считываемых символов), независимо от того, что, по утверждению терминала, он может поддерживаться. Название meta-flag является синонимом этой переменной. Значение по умолчанию - Off, но readline установит его на On, если локаль содержит восьмибитные символы. Эта переменная зависит от категории локали LC_CTYPE и может измениться при изменении локали.
- 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 также влияет на раскладку клавиш по умолчанию.
- keyseq-timeout (500)
- Определяет время, в течение которого readline будет ожидать символ при считывании неоднозначной последовательности клавиш (которая может сформировать полную последовательность клавиш, используя уже прочитанные входные данные, или может потребовать дополнительного ввода для окончания более длинной последовательности клавиш). Если в течение тайм-аута не будет получено никаких входных данных, то readline будет использовать более короткую, но полную последовательность клавиш. Значение указано в миллисекундах, поэтому значение 1000 означает, что readline будет ждать дополнительного ввода в течение одной секунды. Если для этой переменной задано значение, меньшее или равное нулю, или нечисловое значение, то readline буду ждать, пока не будет нажата другая клавиша, чтобы решить, какую последовательность клавиш следует завершить.
- mark-directories (On)
- Если задано значение On, то к окончанию названий каталогов добавляется косая черта.
- mark-modified-lines (Off)
- Если установлено значение On, то строки журнала, которые были изменены, отображаются со звездочкой перед ними (*).
- mark-symlinked-directories (Off)
- Если задано значение On, то к заверениям названий, которые являются символическими ссылками на каталоги, добавляется косая черта (в зависимости от значения mark-directories).
- match-hidden-files (On)
- Эта переменная, если ей присвоено значение On, приводит к тому, что readline сопоставляет файлы, названия которых начинаются с "." (скрытые файлы) при выполнении завершения названия файла. Если установлено значение Off, то для завершения пользователь должен указать в названии файла начальный символ ".".
- Если установлено значение On, то при завершении в меню отображается общий префикс списка возможных завершений (который может быть пустым) перед циклическим просмотром списка.
- output-meta (Off)
- Если задано значение On, то readline будет отображать символы с заданным восьмым разрядом напрямую, а не в виде последовательности escape с мета-префиксом. Значение по умолчанию - Off, но readline установит значение On, если локаль содержит восьмибитные символы. Эта переменная зависит от категории локали LC_CTYPE и может изменяться при изменении локали.
- page-completions (On)
- Если установлено значение On, то readline использует внутренний пейджер, подобный more, для одновременного отображения экрана, полного возможных завершений.
- print-completions-horizontally (Off)
- Если установлено значение On, то readline будет отображать завершения с совпадениями, отсортированными по горизонтали в алфавитном порядке, а не вниз по экрану.
- revert-all-at-newline (Off)
- Если установлено значение On, то readline отменит все изменения в строках истории, прежде чем вернуться при выполнении accept-line. По умолчанию строки истории могут быть изменены и сохранять отдельные списки отмены при вызовах readline.
- show-all-if-ambiguous (Off)
- Это изменяет поведение функций завершения по умолчанию. Если задано значение On, то слова, которые имеют более одного возможного завершения, сразу же отображаются в списке совпадений, а не выдается звонок колокольчика.
- show-all-if-unmodified (Off)
- Это изменяет поведение функций завершения по умолчанию аналогично show-all-if-ambiguous. Если задано значение On, то слова, которые имеют более одного возможного завершения без какого-либо возможного частичного завершения (возможные завершения не имеют общего префикса), то они сразу же отображаются в списке совпадений, а не вызывают звонок колокольчика.
- show-mode-in-prompt (Off)
- Если задано значение On, то добавляется в начало запроса строка, указывающая режим редактирования: emacs, команда или вставка vi. Строки режима могут быть заданы пользователем (например, emacs-mode-string).
- skip-completed-text (Off)
- Если задано значение On, то это изменяет поведение завершения по умолчанию при вставке одного совпадения в строку. Оно активно только при выполнении завершения в середине слова. Если это включено, то readline не вставляет символы завершения, которые соответствуют символам после точки в завершаемом слове, поэтому части слова, следующие за курсором, не дублируются.
- vi-cmd-mode-string ((cmd))
- Если включена переменная show-mode-in-prompt, то эта строка отображается непосредственно перед последней строкой основного приглашения, когда включен, в командном режиме, режим редактирования vi. Значение раскрывается как привязка к клавише, поэтому доступен стандартный набор мета- и управляющих префиксов, а также последовательностей escape с обратной косой чертой. Используйте экранирующие символы \1 и \2 для начала и окончания последовательности непечатаемых символов, которые могут быть использованы для встраивания последовательности управления терминалом в строку режима.
- vi-ins-mode-string ((ins))
- Если включена переменная show-mode-in-prompt, то эта строка отображается непосредственно перед последней строкой основного приглашения, когда включен режим редактирования vi и в режиме вставки. Значение раскрывается как привязка к клавише, поэтому доступен стандартный набор мета- и управляющих префиксов, а также последовательностей escape с обратной косой чертой. Используйте экранирующие символы \1 и \2 для начала и окончания последовательности непечатаемых символов, которые могут быть использованы для встраивания последовательности управления терминалом в строку режима.
- visible-stats (Off)
- Если задано значение On, то при выводе возможных дополнений к названию файла добавляется символ, обозначающий тип файла, как указано в stat(2).
Конструкции условий Readline¶
Readline реализует средство, аналогичное по смыслу функциям условной компиляции препроцессора Си, которое позволяет выполнять привязку клавиш и настройки переменных в результате тестов. Используются четыре директивы синтаксического анализа.
- $if
- The $if construct allows bindings to be made based on the editing
mode, the terminal being used, or the application using readline. The text
of the test, after any comparison operator,
extends to the end of the line; unless otherwise noted, no characters are required to isolate it.
- mode
- Формат mode= директивы $if используется для проверки того, находится ли readline в режиме emacs или vi. Это можно использовать в сочетании с командой set keymap, например, для установки привязок в раскладках emacs-standard и emacs-ctlx, только если readline запускается в режиме emacs.
- term
- Формат term= может использоваться для включения привязок клавиш, специфичных для терминала, а также возможно, для привязки последовательностей клавиш, выводимых функциональными клавишами терминала. Слово, указанное справа от символа =, проверяется как на соответствие полному названию терминала, так и на соответствие части названия терминала перед первым символом -. Это позволяет, например, sun сопоставлять как sun, так и как sun-cmd.
- version
- Тест version может использоваться для сравнения с конкретными версиями readline. Тест version расширяется до текущей версии readline. Набор операторов сравнения включает в себя =, (и ==), !=, <=, >=, < и >. Номер версии, указанный справа от оператора, состоит из основного номера версии, необязательной десятичной точки и необязательного дополнительного номера версии (например, 7.1). Если дополнительный номер версии не указан, то предполагается, что он равен 0. Оператор может быть отделен от строки version и от аргумента номера версии пробелом.
- application
- Конструкция application используется для включения настроек, относящихся к конкретному приложению. Каждая программа, использующая библиотеку readline, устанавливает application name и файл инициализации может проверять наличие определенного значения. Это может использоваться для привязки последовательностей клавиш к функциям, полезным для конкретной программы. Например, следующая команда добавляет последовательность клавиш, которая заключает текущее или предыдущее слово в кавычки в bash:
$if Bash # Quote the current or previous word "\C-xq": "\eb\"\ef\"" $endif
- variable
- Конструкция variable предоставляет простые тесты на равенство для переменных и значений readline. Допустимыми операторами сравнения являются =, == и !=. Название переменной должно быть отделено от оператора сравнения пробелом; оператор может быть отделен от значения справа пробелом. Можно проверять как строковые, так и логические переменные. Логические переменные должны быть проверены на соответствие значениям on и off.
- $endif
- Эта команда, как видно из предыдущего примера, завершает выполнение команды $if.
- $else
- Команды в этой ветви директивы $if выполняются в случае сбоя теста.
- $include
- Эта директива принимает в качестве аргумента одно название файла и считывает команды и привязки из этого файла. Например, следующая директива будет иметь значение /etc/inputrc:
$include /etc/inputrc
Поиск¶
Readline предоставляет команды для поиска строк, содержащих указанную строку, в истории команд (смотрите HISTORY). Существует два режима поиска: инкрементальный incremental и не инкрементальный non-incremental.
Инкрементальный поиск начинается до того, как пользователь закончит вводить строку поиска. По мере ввода каждого символа в строке поиска readline отображает следующую запись из истории, соответствующую введенной строке. Для добавочного поиска требуется ровно столько символов, сколько необходимо для поиска нужной записи в истории. Символы, присутствующие в значении переменной isearch-terminators, используются для завершения инкрементального поиска. Если этой переменной не было присвоено значение, то символы Escape и Control-J завершат инкрементальный поиск. Функция Control-G прервет инкрементальный поиск и восстановит исходную строку. Когда поиск завершается, запись журнала, содержащая строку поиска, становится текущей строкой.
Чтобы найти другие совпадающие записи в списке истории, введите Control-S или Control-R, соответственно. Это приведет к поиску в истории следующей записи, соответствующей введенной строке поиска. Любая другая последовательность клавиш, связанная с командой readline, завершит поиск и выполнит эту команду. Например, команда newline завершит поиск и примет строку, тем самым выполнив команду из списка истории.
Readline запоминает последнюю строку инкрементального поиска. Если две строки Control-R вводятся без каких-либо промежуточных символов, определяющих новую строку поиска, используется любая запомненная строка поиска.
При неинкрементальном поиске считывается вся строка поиска, прежде чем начать поиск совпадающих строк в хронологии. Строка поиска может быть введена пользователем или быть частью содержимого текущей строки.
Названия команд Readline¶
Ниже приведен список названий команд и последовательности клавиш по умолчанию, к которым они привязаны. Названия команд без соответствующей последовательности клавиш по умолчанию не привязаны. В следующих описаниях точка point обозначает текущее положение курсора, а метка mark - положение курсора, сохраненное командой set-mark. Текст между точкой и меткой называется областью region.
Команды перемещения¶
- 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)
- Вернуться к началу текущего или предыдущего слова. Слова состоят из буквенно-цифровых символов (букв и цифр).
- shell-forward-word
- Перейти к концу следующего слова. Слова разделяются метасимволами, не заключенными в кавычки.
- shell-backward-word
- Вернуться к началу текущего или предыдущего слова. Слова разделяются метасимволами оболочки, не заключенными в кавычки.
- previous-screen-line
- Попытаться переместить точку в тот же столбец физического экрана в предыдущей строке физического экрана. Это не даст желаемого эффекта, если текущая строка readline не занимает более одной физической строки или если точка не превышает длину приглашения плюс ширину экрана.
- next-screen-line
- Попытаться переместить точку в тот же столбец физического экрана в следующей строке физического экрана. Это не даст желаемого эффекта, если текущая строка readline не занимает более одной физической строки или если длина текущей строки readline не превышает длину приглашения плюс ширину экрана.
- clear-display (M-C-l)
- Очистить экран и, если возможно, буфер обратной прокрутки терминала, затем перечертить текущую строку, оставив текущую строку в верхней части экрана.
- 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->)
- Перейти к концу истории ввода, т.е. к строке, которая вводится в данный момент.
- operate-and-get-next (C-o)
- Принять текущую строку для выполнения и извлечь следующую строку относительно текущей строки из истории для редактирования. Числовой аргумент, если он указан, то указывает на запись истории, которую следует использовать вместо текущей строки.
- fetch-history
- Используя числовой аргумент, извлечь эту запись из списка истории и сделать ее текущей строкой. Когда аргумент не определён, тогда вернуться к первой записи в списке истории.
- 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
- Выполнить поиск назад по истории в поисках последовательности символов между началом текущей строки и точкой. Это не инкрементальный поиск.
- history-substring-search-backward
- Выполнить поиск вперед по истории в поисках последовательности символов между началом текущей строки и текущей позицией курсора (point). Строка поиска может совпадать с любым местом в строке истории. Это - не инкрементальный поиск.
- history-substring-search-forward
- Выполнить поиск вперед по истории в поисках последовательности символов между началом текущей строки и точкой. Строка поиска может совпадать с любым местом в строке истории. Это не инкрементальный поиск.
- yank-nth-arg (M-C-y)
- Вставить первый аргумент предыдущей команды (обычно второе слово в предыдущей строке) в точку. С аргументом n вставить n-е слово из предыдущей команды (слова в предыдущей команде начинаются со слова 0). Отрицательный аргумент вставляет n-е слово из конца предыдущей команды. Как только аргумент n будет вычислен, он извлекается так, как если бы было указано расширение истории "!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.
- edit-and-execute-command (C-x C-e)
- Вызвать редактор в текущей командной строке и выполнить результат в виде команд оболочки. Bash пытается вызвать $VISUAL, $EDITOR и emacs в качестве редактора в указанном порядке.
Команды изменения текста¶
- end-of-file (usually C-d)
- Символ, указывающий на конец файла, заданный, например, с помощью ``stty''. Если этот символ считывается, когда в строке нет символов, а точка находится в начале строки, то readline интерпретирует его как конец ввода и возвращает EOF.
- delete-char (C-d)
- Удалить символ в точке. Если эта функция привязана к тому же символу, что и символ tty EOF, как это обычно бывает с C-d, смотрите результаты выше.
- backward-delete-char (Rubout)
- Удалить символ, находящийся за курсором. Если задан числовой аргумент, то сохранить удаленный текст в кольце удаления.
- 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)
- Указать текущее (или следующее) слово с заглавной буквы. При отрицательном аргументе указать предыдущее слово с заглавной буквы, но не перемещать точку.
- overwrite-mode
- Переключить режим перезаписи. При явном положительном числовом аргументе переключиться в режим перезаписи. При явном отрицательном числовом аргументе переключиться в режим вставки. Эта команда влияет только на режим emacs; В режиме vi перезапись выполняется по-другому. Каждый вызов readline() начинается в режиме вставки. В режиме перезаписи символы, связанные с self-insert, заменяют текст в точке, а не сдвигают текст вправо. Символы, связанные с backward-delete-char, заменяют символ перед точкой на пробел. По умолчанию эта команда не привязана.
Уничтожение и выдёргивание¶
- 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.
- shell-kill-word
- Удалить от точки до конца текущего слова или, если между словами, то до конца следующего слова. Границы слов совпадают с теми, которые используются в shell-forward-word.
- shell-backward-kill-word
- Удалить слово, стоящее за точкой. Границы слов совпадают с теми, которые используются в shell-backward-word.
- unix-word-rubout (C-w)
- Удалить слово за точкой, используя пробел в качестве границы слова. Удалённый текст сохраняется на кольце удалённых слов.
- unix-filename-rubout
- Удалить слово за точкой, используя пробел и косую черту в качестве границ слова. Вычеркнутый текст сохраняется на кольце удалённых слов.
- 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 следует одна или несколько цифр, с необязательным начальным знаком минус, то эти цифры определяют аргумент. Если за командой universal-argument следуют цифры, то выполнение снова заканчивается числовым аргументом, иначе игнорируется. В качестве специального случая, если за этой командой сразу следует символ, который не является ни цифрой, ни знаком минус, то количество аргументов для следующей команды умножается на четыре. Изначально количество аргументов равно единице, поэтому при выполнении этой функции в первый раз количество аргументов увеличивается на четыре, во второй раз количество аргументов увеличивается до шестнадцати и так далее.
Завершение¶
- complete (TAB)
- Попытаться выполнить завершение текста перед точкой. Bash пытается окончить обработку текста как переменной (если текст начинается с $), названием пользователя (если текст начинается с ~), названием хоста (если текст начинается с @) или команды (включая псевдонимы и функции) по очереди. Если ни один из них не приводит к совпадению, то выполняется попытка завершить названием файла.
- possible-completions (M-?)
- Показать возможные варианты завершения текста перед точкой.
- insert-completions (M-*)
- Вставить все завершения текста перед точкой, которые были бы созданы с помощью possible-completions.
- Аналогично complete, но заменяет словом, которым необходимо завершить, на одно совпадение из списка возможных вариантов. Повторное выполнение шагов menu-complete по списку возможных вариантов, вставляет каждый совпадающий вариант по очереди. В конце списка вариантов раздается звонок (в зависимости от настройки bell-style) и восстанавливается исходный текст. Аргумент n перемещает на n позиций в списке совпадений вперед; отрицательный аргумент может использоваться для перемещения по списку назад. Эта команда предназначена для привязки к клавише TAB, но по умолчанию не привязана.
- Идентична menu-complete, но перемещает назад по списку возможных вариантов завершения, как если бы для menu-complete был задан отрицательный аргумент. По умолчанию эта команда не привязана.
- 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)
- Попробовать завершить текст перед точкой, сравнив текст со строками из списка истории на предмет возможного совпадения завершений.
- dabbrev-expand
- Попробовать завершить меню с текстом перед точкой, сравнив текст со строками из списка истории на предмет возможного совпадения завершений.
- complete-into-braces (M-{)
- Выполнить заполнение названия файла и вставить список возможных вариантов, заключенный в фигурные скобки, чтобы список был доступен командной строке (смотрите подраздел Расширение фигурных скобок выше).
Макросы клавиатуры¶
- start-kbd-macro (C-x ()
- Начать сохранять символы, введенные в текущий макрос клавиатуры.
- end-kbd-macro (C-x ))
- Прекратить сохранять символы, введенные в текущий макрос клавиатуры и сохранить определение.
- call-last-kbd-macro (C-x e)
- Повторно выполнить последний определенный макрос клавиатуры, сделав так, чтобы символы в макросе отображались так, как если бы они были набраны с клавиатуры.
- print-last-kbd-macro ()
- Вывести последний определенный макрос клавиатуры в формате, подходящем для файла inputrc.
Разное¶
- re-read-init-file (C-x C-r)
- Прочитать содержимое файла inputrc и включить в него все найденные там привязки или назначения переменных.
- abort (C-g)
- Прервать текущую команду редактирования и выдать сигнал звонка на терминал (в соответствии с настройкой bell-style).
- do-lowercase-version (M-A, M-B, M-x, ...)
- Если измененный символ x имеет верхний регистр, то выполнить команду, привязанную к соответствующему измененному символу нижнего регистра. Поведение не определено, если x уже имеет нижний регистр.
- prefix-meta (ESC)
- Преобразовать следующий введенный символ. 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-])
- Символ считывается и точка перемещается на предыдущее значение этого символа. Отрицательный аргумент выполняет поиск последующих значений.
- skip-csi-sequence
- Прочитать достаточное количество символов, чтобы использовать последовательность из нескольких клавиш, например, определенную для таких клавиш, как Home и End. Такие последовательности начинаются с индикатора последовательности управления (CSI), обычно ESC-[. Если эта последовательность привязана к "\[", то клавиши, создающие такие последовательности, не будут иметь эффекта, если они явно не привязаны к команде readline, а не к вставке случайных символов в буфер редактирования. По умолчанию это не привязано, но обычно привязывается к ESC-[.
- insert-comment (M-#)
- Без числового аргумента значение переменной readline comment-begin вставляется в начало текущей строки. Если указан числовой аргумент, эта команда действует как переключатель: если символы в начале строки не соответствуют значению comment-begin, то значение вставляется, в противном случае символы в comment-begin удаляются из начала строки. В любом случае строка принимается так, как если бы была введена новая строка. Значение по умолчанию для comment-begin приводит к тому, что эта команда преобразует текущую строку в комментарий оболочки. Если числовой аргумент приводит к удалению символа комментария, то строка будет выполнена оболочкой.
- spell-correct-word (C-x s)
- Выполнить исправление орфографии в текущем слове, указав его в качестве каталога или названия файла, таким же образом, как опции cdspell оболочки. Границы слов совпадают с границами, используемыми в опции shell-forward-word.
- glob-complete-word (M-g)
- Слово перед точкой рассматривать как шаблон для расширения названия пути, к которому неявно добавляется звездочка. Этот шаблон используется для создания списка совпадающих названий файлов для возможных доработок.
- 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.
Завершение программ¶
Когда в качестве аргумента для команды, для которой была определена спецификация завершения (compspec) с использованием встроенной команды complete (смотрите ниже раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ), тогда выполняется попытка ввода слова и вызываются средства программного завершения.
Сначала определяется название команды. Если командное слово представляет собой пустую строку (попытка завершения в начале пустой строки), то используется любая спецификация завершения, определенная опцией -E команды complete. Если для этой команды определена спецификация завершения, то она используется для создания списка возможных завершений для слова. Если слово команды является полным названием пути, то сначала выполняется поиск спецификации завершения для полного названия пути. Если для полного названия пути не найдена спецификация завершения, то выполняется попытка найти спецификацию завершения для части, следующей за последней косой чертой. Если эти поиски не приводят к получению спецификации завершения, то по умолчанию используется любая спецификация завершения, определенная опцией -D для complete. Если спецификация завершения по умолчанию отсутствует, то bash в качестве последнего средства пытается расширить псевдоним для командного слова и пытается найти спецификацию завершения для командного слова из любого успешного расширения.
Как только спецификация завершения найдена, то она используется для создания списка подходящих слов. Если спецификация завершения не найдена, то выполняется завершение bash по умолчанию, как это описано выше в подразделе Завершение.
Сначала используются действия, указанные в спецификации завершения. Возвращаются только совпадения, перед которыми стоит завершаемое слово. Когда для заполнения названия файла или каталога используется опция -f или -d, то для фильтрации совпадений используется переменная оболочки FIGNORE.
Далее определяются все завершения, указанные в шаблоне расширения названия пути к опции -G. Слова, сгенерированные с помощью шаблона, не обязательно должны совпадать с завершаемым словом. Переменная оболочки GLOBIGNORE не используется для фильтрации совпадений, а используется переменная FIGNORE.
Далее рассматривается строка, указанная в качестве аргумента опции -W. Сначала строка разделяется с использованием символов в специальной переменной IFS в качестве разделителей. Кавычки в оболочке соблюдаются. Затем каждое слово расширяется с помощью фигурных скобок, тильды, параметров и переменных, подстановки команд и арифметического расширения, как описано выше в разделе РАСШИРЕНИЕ. Результаты разделяются с использованием правил, описанных выше в подразделе Разделение слов. Результаты расширения сопоставляются по префиксу с завершаемым словом и совпадающие слова становятся возможными завершениями.
После того, как эти совпадения будут созданы, будет вызвана любая функция оболочки или команда, указанная опциями -F и -C. При вызове команды или функции переменным COMP_LINE, COMP_POINT, COMP_KEY и COMP_TYPE присваиваются значения, как описано выше в подразделе Переменные оболочки. Если вызывается функция оболочки, то также устанавливаются переменные COMP_WORDS и COMP_C WORD. Когда вызывается функция или команда, тогда первый аргумент ($1) - это название команды, аргументы которой завершаются, а второй аргумент ($2) - это завершаемое слово, а третий аргумент ($3) - это слово предшествующее завершаемому слову в текущей командной строке. Фильтрация созданных завершений по завершаемому слову не выполняется; функция или команда имеют полную свободу в генерировании совпадений.
Сначала вызывается любая функция, указанная с помощью -F. Функция, для генерации совпадений, может использовать любые средства оболочки, включая описанную ниже встроенную команду compgen. Она должна поместить возможные завершения в переменную массива COMPREPLY, по одному для каждого элемента массива.
Далее, любая команда, указанная опцией -C, вызывается в среде, эквивалентной подстановке команд. В стандартном выводе должен быть выведен список завершений, по одному на строку. При необходимости можно использовать обратную косую черту для экранирования новой строки.
После того, как будут созданы все возможные варианты завершений, к списку будет применен любой фильтр, указанный с помощью опции -X. Фильтр представляет собой шаблон, используемый для расширения названия пути; & в шаблоне заменяется текстом завершаемого слова. Литерал & может быть экранирован обратной косой чертой; обратная косая черта удаляется перед попыткой сопоставления. Любое завершение, соответствующее шаблону, будет удалено из списка. Начальная буква ! инвертирует шаблон; в этом случае любое завершение, не соответствующее шаблону, будет удалено. Если включена опция оболочки nocasematch, то сопоставление выполняется без учета регистра буквенных символов.
Наконец, к каждому элементу списка завершения добавляются любые префиксы и суффиксы, указанные с помощью опций -P и -S и результат возвращается в список завершения readline в виде списка возможных завершений.
Если ранее примененные действия не привели к каким-либо совпадениям, а опция -o dirnames была указана в команде complete, то при определении спецификации завершения, будет предпринята попытка завершения названия каталога.
Если опция -o plusdirs была указана в команде complete при определении спецификации завершения, то выполняется попытка завершения названия каталога и любые совпадения добавляются к результатам других действий.
По умолчанию, если найдена спецификация завершения все, что она генерирует, возвращается в код завершения в качестве полного набора возможных завершений. По умолчанию не выполняются попытки завершения bash, а readline для завершения названия файла по умолчанию отключена. Если опция -o bashdefault была указана в complete при определении спецификации завершения, то выполняется попытка завершения bash по умолчанию, когда спецификация завершения не генерирует совпадений. Если опция -o default была указана в complete при определении спецификации завершения, то будет выполнено завершение readline по умолчанию , если спецификация завершения (при попытке, завершений оболочки bash по умолчанию ) не приведёт к совпадениям.
Когда спецификация завершения указывает, что требуется завершение названия каталога, тогда программируемые функции завершения заставляют readline добавлять косую черту к завершенным названиям, которые являются символическими ссылками на каталоги, в зависимости от значения переменной readline mark-directories, независимо от настройки переменной readline mark-symlinked-directories.
Предусмотрена некоторая поддержка динамического изменения завершений. Это наиболее полезно при использовании в сочетании с завершением по умолчанию, указанным с помощью complete -D. Функции оболочки, выполняемые как обработчики завершения, могут указывать на то, что завершение следует повторить, возвращая статус завершения, равный 124. Если функция оболочки возвращает значение 124 и изменяет спецификацию завершения, связанную с командой, для которой выполняется попытка завершения (указывается в качестве первого аргумента при выполнении функции), программное завершение перезапускается с самого начала с попыткой найти новую спецификации завершения для этой команды. Это позволяет динамически создавать набор завершений по мере попытки завершения, а не загружать все сразу.
Например, предполагая, что существует библиотека спецификаций завершения, каждая из которых хранится в файле, соответствующем названию команды, следующая функция завершения по умолчанию будет загружать завершения динамически:
_completion_loader()
{
. "/etc/bash_completion.d/$1.sh" >/dev/null
2>&1 && return 124
}
complete -D -F _completion_loader -o bashdefault -o
default
ИСТОРИЯ¶
Когда включена опция -o history для встроенной команды set, тогда оболочка предоставляет доступ списку ранее введенных команд command history. Значение переменной HISTSIZE используется в качестве количества команд, которые необходимо сохранить в списке истории. Сохраняется текст последних команд HISTSIZE (по умолчанию 500). Оболочка сохраняет каждую команду в списке истории до расширения параметров и переменных (смотрите раздел РАСШИРЕНИЕ выше), но после того, как выполняется расширение истории, в зависимости от значений переменных оболочки HISTIGNORE и HISTCONTROL.
При запуске, история инициализируется из файла, название которого задается переменной HISTFILE (по умолчанию ~/.bash_history). Файл, название которого задано значением HISTFILE, при необходимости обрезается, чтобы он содержал не более количества строк, указанных значением HISTFILESIZE. Если HISTFILESIZE не задано или имеет значение нуль, нечисловое значение или числовое значение меньше нуля, то файл истории не обрезается. При чтении файла истории строки, начинающиеся с символа комментария к истории, за которым сразу следует цифра, интерпретируются как временные метки для следующей строки истории. Эти временные метки отображаются необязательно в зависимости от значения переменной HISTTIMEFORMAT. При завершении работы оболочки с включенной функцией просмотра истории последние строки $HISTSIZE копируются из списка просмотра истории в $HISTFILE. Если опция оболочки histappend включена (смотрите описание команды shopt в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже), то строки добавляются в файл истории, в противном случае файл истории перезаписывается. Если значение HISTFILE не задано или файл истории недоступен для записи, то история не сохраняется. Если задана переменная HISTTIMEFORMAT, то временные метки записываются в файл истории и помечаются символом комментария к истории, чтобы их можно было сохранять во время сеансов оболочки. При этом используется символ комментария к истории, чтобы отличать временные метки от других строк истории. После сохранения истории файл истории обрезается, чтобы он содержал не более строк, указанных в HISTFILESIZE. Если значение HISTFILESIZE не задано или равно нулю, нечисловому значению или числовому значению, меньшему нуля, то файл истории не обрезается.
Встроенная команда fc (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже) может использоваться для отображения или редактирования и повторного выполнения части списка истории. Встроенная команда history может использоваться для отображения или изменения списка истории и управления файлом истории. При использовании редактирования в командной строке в каждом режиме редактирования доступны команды поиска, которые предоставляют доступ к списку истории.
Оболочка позволяет управлять тем, какие команды сохраняются в списке истории. Переменные HISTCONTROL и HISTIGNORE могут быть установлены таким образом, чтобы оболочка сохраняла только часть введенных команд. Опция оболочки cmdhist, если она включена, заставляет оболочку пытаться сохранить каждую строку многострочной команды в одной и той же записи истории, добавляя точки с запятой, где это необходимо, для сохранения синтаксической корректности. Опция оболочки lithic заставляет оболочку сохранять команду со встроенными символами новой строки вместо точек с запятой. Смотрите описание встроенной команды shopt ниже в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ для получения информации о настройке и отключении опций оболочки.
РАСШИРЕНИЕ ИСТОРИИ¶
Оболочка поддерживает функциональную возможность расширения истории, аналогичную расширению истории в csh. В этом разделе описывается синтаксис доступных функциональных возможностей. Функциональные возможности включены по умолчанию для интерактивных оболочек и могут быть отключены с помощью опции +H для встроенной команды set (смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ ниже). Неинтерактивные оболочки по умолчанию не выполняют расширение истории.
Расширения истории вводят слова из списка истории во входной поток, упрощая повторение команд, вставляя аргументы предыдущей команды в текущую строку ввода или быстро исправляя ошибки в предыдущих командах.
Расширение истории выполняется сразу после прочтения всей строки, до того, как оболочка разбивает ее на слова и выполняется для каждой строки в отдельности, не принимая во внимание кавычки в предыдущих строках. Оно состоит из двух частей. Первая часть заключается в определении того, какую строку из списка истории использовать при замене. Вторая заключается в выборе фрагментов этой строки для включения в текущую строку. Строка, выбранная из истории это - event, а фрагменты этой строки, на которые воздействуют это - words. Для управления выбранными словами могут использоваться различные модификаторы modifiers. Строка разбивается на слова таким же образом, как и при чтении входных данных, так что несколько слов, разделенных метасимволами metacharacter и заключенных в кавычки, считаются одним словом. Расширение истории вводится с помощью символа расширения истории, который по умолчанию равен !. Только обратная косая черта (\) и одинарные кавычки могут заключать символ расширения истории, но символ расширения истории также рассматривается как заключенный в кавычки, если он непосредственно предшествует закрывающей двойной кавычке в строке, заключенной в двойные кавычки.
Несколько символов запрещают расширение истории, если они находятся сразу после символа расширения истории, даже если он не заключен в кавычки: пробел, табуляция, новая строка, возврат каретки и =. Если включена опция оболочки extglob, то также будет запрещено расширение истории (.
Для настройки поведения расширения истории можно использовать несколько опций оболочки, настраиваемых с помощью встроенной команды shopt. Если включена опция оболочки histverify (смотрите описание встроенной команды shopt ниже) и используется библиотека readline, то подстановки в историю не передаются немедленно в синтаксический анализатор оболочки. Вместо этого развернутая строка загружается в буфер редактирования readline для дальнейшей модификации. Если используется библиотека readline и включена опция оболочки histreedit, то неудачная подстановка истории будет повторно загружена в буфер редактирования readline для исправления. Опцию -p для встроенной команды history можно использовать, чтобы посмотреть, что будет делать расширение истории, прежде чем использовать его. Опция -s для встроенной команды history может использоваться для добавления команд в конец списка истории без их фактического выполнения, чтобы они были доступны для последующего отзыва.
Оболочка позволяет управлять различными символами, используемыми механизмом расширения истории (смотрите описание histchars выше в подразделе Переменные оболочки). Оболочка использует символ комментария к истории для обозначения временных меток истории при записи файла истории.
Указатели событий¶
Указатель события это - ссылка на запись командной строки в списке истории. Если ссылка не является абсолютной, то события отображаются относительно текущего положения в списке истории.
- !
- Запуск подстановки истории, за исключением тех случаев, когда за ней следуют blank, новая строка, возврат каретки, = или ( (когда включена опция оболочки extglob с помощью встроенной команды shopt).
- !n
- Обратится к командной строке n.
- !-n
- Обратится к текущей команде минус n.
- !!
- Обратитесь к предыдущей команде. Это синоним "!-1".
- !string
- Обратится к самой последней команде, предшествующей текущей позиции в списке истории, начинающейся со строки string.
- !?string[?]
- Обратится к самой последней команде, предшествующей текущей позиции в списке истории, содержащей строку string. Конечная строка ? может быть опущена, если за строкой string сразу следует новая строка. Если string отсутствует, то используется строка из самого последнего поиска; если предыдущей строки поиска нет, то это - ошибка.
- ^string1^string2^
- Быстрая замена. Повторить предыдущую команду, заменив строку string1 на строку string2. Эквивалентно “!!:s^string1^string2^” (смотрите подраздел Модификаторы ниже).
- !#
- На данный момент введена вся командная строка целиком.
Указатели слова¶
Указатели слова используются для выбора нужных слов в событии. Символ : отделяет спецификацию события от указателя слова. Он может быть опущен, если указатель слова начинается с ^, $, *, - или %. Слова нумеруются с начала строки, причем первое слово обозначается 0 (ноль). Слова вставляются в текущую строку с помощью одинарных пробелов.
- 0 (zero)
- Нулевое слово. Для оболочки это командное слово.
- n
- Слово n.
- ^
- Это первый аргумент. То есть слово 1.
- $
- Последнее слово. Обычно это последний аргумент, но он расширяется до нулевого слова, если в строке есть только одно слово.
- %
- Первое слово, совпадающее с последним запросом "?string?", когда строка поиска начинается с символа, который является частью слова.
- x-y
- Диапазон слов; "-y" сокращение; означает "0-y".
- *
- Все слова, кроме нуля. Это синоним `1-$'. Использование *, если в событии есть только одно слово, не является ошибкой; в этом случае возвращается пустая строка.
- x*
- Сокращение x-$.
- x-
- Сокращает x-$ как x*, но опускает последнее слово. Если x отсутствует, то по умолчанию оно равно 0.
Если указатель слова представлен без указания события, то в качестве события используется предыдущая команда.
Модификаторы¶
После необязательного обозначения слова может отображаться последовательность из одного или нескольких следующих модификаторов, каждому из которых предшествует символ ":". Они изменяют слово или несколько слов, выбранных из истории событий.
- h
- Удалить завершающий компонент названия файла, оставив только заголовок.
- t
- Удалить все начальные компоненты названия файла, оставив хвостовую часть.
- r
- Удалить завершающий суффикс формы .xxx, оставив основное название.
- e
- Удалить все, кроме завершающего суффикса.
- p
- Вывести новую команду, но не выполнять ее.
- q
- Закавычивать замененные слова, но избегать дальнейших замен.
- x
- Замененные слова заключить в кавычки, как в q, но разбить на слова в пробелах blanks и в новой строке. Модификаторы q и x являются взаимоисключающими; используется последний из указанных.
- s/old/new/
- Заменить новое new на первое вхождениестарого old в строке события. В качестве разделителя вместо / может использоваться любой символ. Последний разделитель необязателен, если он является последним символом в строке события. Разделитель может быть заключен в кавычки в old и new с одной обратной косой чертой. Если символ & появляется в new, то он заменяется на old. В кавычках символ & будет одинарная обратная косая черта. Если значение old равно нулю, то оно устанавливается равным последней замене old или, если предыдущие замены в истории не выполнялись, то последней замене string в поиске !?string[?]. Если значение new равно нулю, то все совпадающие значения old удаляются.
- &
- Повторить предыдущую замену.
- g
- Привести к тому, что изменения будут применены ко всей строке событий. Используется в сочетании с ":s" (например, ":gs/old/new/") или ":&". При использовании с ":s" вместо / можно использовать любой разделитель, а последний разделитель необязателен, если он является последним символом строки события. Одно a может использоваться как синоним g.
- G
- Применить следующий модификатор "s" или "&" по одному разу к каждому слову в строке события.
ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ¶
Если не указано иное, каждая встроенная команда, описанная в этом разделе как принимающая опции, перед которыми стоит -, принимает -- для обозначения конца опций. Встроенные команды : true, false и test/[ не принимают опции и не обрабатывают -- особым образом. Встроенные команды exit, logout, return, break, continue, let и shift принимают и обрабатывают аргументы, начинающиеся с -, не требуя --. Другие встроенные команды, которые принимают аргументы, но не указаны как принимающие опции, интерпретируют аргументы, начинающиеся с -, как недопустимые опции и требуют -- для предотвращения такой интерпретации.
- : [arguments]
- Никакого действия; команда не выполняет ничего, кроме расширения аргументов arguments и выполнения любых указанных перенаправлений. Статус возврата равен нулю.
-
. filename [arguments] - source filename [arguments]
- Считывает и выполняет команды из файла filename в текущей среде оболочки и возвращает статус завершения последней команды, выполненной из файла filename. Если название файла filename не содержит косой черты, то названия файлов в переменной PATH используются для поиска каталога, содержащего filename. Файл, который требуется найти в PATH, необязательно должен быть исполняемым. Если оболочка bash не находится в режиме posix mode, то она выполняет поиск в текущем каталоге, если в PATH файл не найден. Если опция sourcepath для встроенной команды shopt отключена, то поиск по PATH не выполняется. Если указаны какие-либо аргументы arguments, то они становятся позиционными параметрами при выполнении filename. В противном случае позиционные параметры остаются неизменными. Если включена опция -T, то . наследует любую ловушку в DEBUG; если это не так, то любая строка ловушки DEBUG сохраняется и восстанавливается при вызове ., и . отключает ловушку DEBUG во время ее выполнения. Если значение -T не задано, а исходный файл изменяет ловушку DEBUG, то новое значение сохраняется после завершения .. Возвращаемый статус - это статус последней команды, выполненной в скрипте (0, если команды не выполняются) и значение false, если файл filename не найден или он не может быть прочитан.
- alias [-p] [name[=value] ...]
- Псевдоним Alias без аргументов или с опцией -p выводит список псевдонимов в виде alias name=value на стандартный вывод. При вводе аргументов для каждого названия name, для которого задано значение value, определяется псевдоним. Пробел в конце value приводит к проверке следующего слова на подстановку псевдонима при расширении псевдонима. Для каждого name в списке аргументов, для которого не указано значение value, выводятся название и значение псевдонима. Псевдоним Alias возвращает значение true, если только не указано name, для которого псевдоним не был определен.
- bg [jobspec ...]
- Возобновлять каждое приостановленное задание jobspec в фоновом режиме, как если бы оно было запущено с помощью &. Если задание jobspec отсутствует, то используется представление оболочки о текущем задании current job. bg jobspec возвращает 0, если только не выполняется, когда управление заданиями отключено или при запуске с включенным управлением заданиями любое указанное задание jobspec не был найдено или было запущено без управления заданиями.
- bind [-m keymap] [-lpsvPSVX]
- bind [-m keymap] [-q function] [-u function] [-r keyseq]
- bind [-m keymap] -f filename
- bind [-m keymap] -x keyseq:shell-command
- bind [-m keymap] keyseq:function-name
- bind [-m keymap] keyseq:readline-command
- bind readline-command-line
- Вывести на дисплей текущие привязки клавиш и функций readline, привязывать последовательность клавиш к функции или макросу readline или устанавливать переменную readline. Каждый аргумент, не содержащий опции, является командой в том виде, в каком он должен отображаться в файле инициализации readline, таком как .inputrc, но каждая привязка или команда должны передаваться как отдельный аргумент; например, "\C-x\C-r": re-read-init-file". Опции, если они указаны, имеют следующие значения:
- -m keymap
- Использовать keymap в качестве плана расположения клавиш, на который будут влиять последующие привязки. Допустимыми названиями для keymap являются emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command и вставка vi-insert. vi эквивалентно vi-command (vi-move также является синонимом); emacs эквивалентно emacs-standard.
- -l
- Список всех функций readline.
- -p
- Вывести на дисплей названия функций и привязки readline таким образом, чтобы их можно было перечитать.
- -P
- Вывести текущие названия функций и привязки readline.
- -s
- Вывести на дисплей последовательности клавиш readline, привязанные к макросам, и строки, которые они выводят, таким образом, чтобы их можно было перечитать.
- -S
- Вывести на дисплей последовательности клавиш readline, привязанные к макросам, и строки, которые они выводят.
- -v
- Вывести на дисплей названия и значения переменных readline таким образом, чтобы их можно было перечитать.
- -V
- Показать текущие названия и значения переменных readline.
- -f filename
- Прочитать привязки клавиш из файла filename.
- -q function
- Запросить, какие клавиши вызывают данную функцию function.
- -u function
- Отменить привязку всех клавиш, привязанных к данной функции function.
- -r keyseq
- Удалить все текущие привязки для keyseq.
- -x keyseq:shell-command
- Вызывает выполнение команды shell-command всякий раз, когда вводится keyseq. Когда выполняется shell-command, тогда оболочка присваивает переменной READLINE_LINE значение содержимого буфера строк readline, а переменным READLINE_POINT и READLINE_MARK значение текущего местоположения точки вставки и сохраненной точки вставки (метки), соответственно. Оболочка присваивает любой числовой аргумент, указанный пользователем, переменной READLINE_ARGUMENT. Если аргумента не было, то эта переменная не задана. Если выполненная команда изменит значение любого из значений READLINE_LINE, READLINE_POINT или READLINE_MARK, то эти новые значения будут отражены в состоянии редактирования.
- -X
- Показать все последовательности клавиш, привязанные к командам оболочки, и связанные с ними команды в формате, который можно повторно использовать в качестве входных данных.
Возвращаемое значение равно 0, если только не задана нераспознанная опция или не произошла ошибка.
- break [n]
- Выйти из циклов for, while, until или select. Если указано значение n, то выполнить разрыв n уровней. Значение n должно быть ≥ 1. Если значение n больше, чем количество замкнутых циклов, то все замкнутые циклы завершаются. Возвращаемое значение равно 0, если только значение n не больше или не равно 1.
- builtin shell-builtin [arguments]
- Выполнить указанную встроенную команду оболочки, передав ей аргументы arguments и вернуть статус завершения. Это полезно при определении функции, название которой совпадает с названием встроенной команды оболочки, сохраняя функциональность встроенной команды оболочки внутри функции. Встроенная команда cd обычно переопределяется таким образом. Возвращаемый статус равен false (ошибка), если команда shell-builtin не является встроенной командой оболочки.
- caller [expr]
- Возвращает контекст любого активного вызова подпрограммы (функции оболочки или сценария, выполняемого с помощью встроенных команд . или source). Без expr, caller отображает номер строки и название исходного файла текущего вызова подпрограммы. Если в качестве expr указано неотрицательное целое число, то caller отображает номер строки, название подпрограммы и исходный файл, соответствующие этой позиции в текущем стеке выполняемых вызовов. Эта дополнительная информация может быть использована, например, для вывода трассировки стека. Текущим кадром является кадр 0. Возвращаемое значение равно 0, если только оболочка не выполняет вызов подпрограммы или выражение exprне соответствует допустимой позиции в стеке вызовов.
- cd [-L|[-P [-e]] [-@]] [dir]
- Изменить текущий каталог на каталог dir. Если dir не указан, то значение переменной оболочки HOME будет использоваться по умолчанию. Переменная CDPATH определяет путь поиска каталога, содержащего dir: в каждом названии каталога в CDPATH выполняется поиск dir. Альтернативные названия каталогов в CDPATH разделяются двоеточием (:). Пустое название каталога в CDPATH совпадает с названием текущего каталога, т.е. `.". Если dir начинается с косой черты (/), то CDPATH не используется. Опция -P заставляет cd использовать физическую структуру каталогов, разрешая символические ссылки при обходе dir и перед обработкой экземпляров .. в dir (смотрите также опцию -P для встроенной команды set); опция -L заставляет переходить по символическим ссылкам, разрешая ссылку после обработки экземпляров .. в dir. Если .. появляется в dir, то это обрабатывается путем удаления непосредственно предшествующего компонента пути из dir, обратно к косой черте или началу dir. Если для опции -e указано значение -P, а текущий рабочий каталог не может быть успешно определен после успешной смены каталога, то cd вернет статус не успешно (unsuccessful). В системах, которые это поддерживают, опция -@ представляет расширенные атрибуты, связанные с файлом, в виде каталога. Аргумент - преобразуется в $OLDPWD перед попыткой изменения каталога. Если используется непустое название каталога из CDPATH или если - является первым аргументом, и изменение каталога прошло успешно, то абсолютный путь к новому рабочему каталогу выводится на стандартный вывод. Если изменение каталога прошло успешно, то cd присваивает переменной окружения PWD значение нового названия каталога, а переменной окружения OLDPWD присваивает значение текущего рабочего каталога перед изменением. Возвращаемое значение равно true, если каталог был успешно изменен; в противном случае - false.
- command [-pVv] command [arg ...]
- Выполнить команду command с аргументом args, отключив поиск обычной функции оболочки. Выполняются только встроенные команды или команды, найденные в PATH. Если задана опция -p, то поиск command выполняется с использованием значения по умолчанию для PATH, которое гарантированно позволяет найти все стандартные утилиты. Если указана опция -V или -v, то выводится описание command. Опция -v выводит на экран одно слово, указывающее на команду или название файла, использованные для вызова command; опция -V дает более подробное описание. Если указана опция -V или -v, то статус завершения равен 0, если command найдена, и 1, если нет. Если ни одна из опций не указана и произошла ошибка или command не может быть найдена, то статус завершения равен 127. В противном случае статус завершения встроенной команды command совпадает со статусом завершения самой команды command.
- compgen [option] [word]
- Создать
возможные
совпадения
по
завершению
для слова
word в
соответствии
с опциями
option, которые
могут быть
любыми
опциями,
принятыми
во
встроенной
команде complete,
за
исключением
-p и -r, и
вывести
совпадения
на
стандартный
вывод. При
использовании
опций -F
или -C
различные
переменные
оболочки,
заданные
программируемыми
средствами
завершения,
хотя и
доступны,
но не будут
иметь
полезных
значений.
Критерии будут сгенерированы таким же образом, как если бы программируемый код завершения сгенерировал их непосредственно из спецификации завершения с теми же флагами. Если указано значение слова word, то будут отображены только те завершения, которые соответствуют word.
Возвращаемое значение равно true, если только не была указана недопустимая опция или не было сгенерировано никаких критериев.
- complete [-abcdefgjksuv] [-o comp-option] [-DEI] [-A action] [-G globpat] [-W wordlist]
-
[-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] name [name ...] - complete -pr [-DEI] [name ...]
- Указать,
как должны
быть
заполнены
аргументы
для
каждого
аргумента
name. Если
указана
опция -p
или если
опции не
указаны, то
существующие
спецификации
заполнения
выводятся
таким
образом,
чтобы их
можно было
повторно
использовать
в качестве
входных
данных.
Опция -r
удаляет
спецификацию
завершения
для
каждого name
или, если name
не указаны,
то все
спецификации
завершения.
Опция -D
указывает,
что другие
предоставленные
опции и
действия
должны
применяться
к
завершению
команды
"по
умолчанию";
то есть к
попытке
завершения
команды,
для
которой
ранее не
было
определено
завершение.
Опция -E
указывает,
что другие
предоставленные
опции и
действия
должны
применяться
к
"пустому"
завершению
команды; то
есть к
попытке
завершения
в пустой
строке.
Опция -I
указывает,
что другие
предоставленные
опции и
действия
должны
применяться
к
завершению
начального
слова в
строке, не
связанного
с
назначением,
или после
разделителя
команд,
такого как
; или |,
который
обычно
является
завершением
названия
команды.
Если
указано
несколько
опций, то
опция -D
имеет
приоритет
пере
опцией -E, а
обе опции
имеют
приоритет
перед
опцией -I.
Если
указан
какой-либо
из
аргументов
-D, -E или -I, то
любые
другие
аргументы
name
игнорируются;
эти
дополнения
применяются
только к
случаю,
указанному
опцией.
Описан процесс применения этих спецификаций завершения при попытке завершения слова word above under Programmable Completion.
Другие опции, если они указаны, то имеют следующие значения. Аргументы опций -G, -W и -X (и, при необходимости, опций -P и -S) должны быть заключены в кавычки, чтобы защитить их от расширения до вызова встроенной команды complete.
- -o comp-option
- Опция comp-option управляет несколькими аспектами поведения compspec, помимо простого создания дополнений. Опция comp-option может быть одной из:
- bashdefault
- Выполните остальные действия по умолчанию для оболочки bash, если compspec не генерирует совпадений.
- default
- Использовать название файла readline по умолчанию, если спецификация завершения не генерирует критериев соответствия.
- dirnames
- Выполнить заполнение названия каталога, если спецификация завершения (compspec) не генерирует критериев соответствия.
- filenames
- Сообщить readline, что спецификация завершения генерирует названий файлов, поэтому она может выполнять любую обработку, связанную с названиями файлов (например, добавлять косую черту к названиям каталогов, заключать специальные символы в кавычки или подавлять пробелы в конце). Предназначено для использования с функциями оболочки.
- noquote
- Обязать readline не заключать в кавычки окончания слов, если слова являются названиями файлов (по умолчанию названия файлов заключаются в кавычки).
- nosort
- Обязать readline не сортировать список возможных завершений в алфавитном порядке.
- nospace
- Обязать readline не добавлять пробел (по умолчанию) к словам, завершающим конец строки.
- plusdirs
- После того, как созданы все критерии, определенные спецификацией завершения, выполнить попытку завершить название каталога и все совпадения добавить к результатам других действий.
- -A action
- Это действие action может быть одним из следующих при создании списка возможных завершений:
- alias
- Псевдонимы. Они также могут быть определены с помощью -a.
- arrayvar
- Названия переменных массива.
- binding
- Названия привязанных клавиш Readline.
- builtin
- Названия встроенных команд оболочки. Они также могут быть определены с помощью -b.
- command
- Названия команд. Они также могут быть определены с помощью -c.
- directory
- Названия каталогов. Они также могут быть определены с помощью -d.
- disabled
- Названия отключенных встроенных компонентов оболочки.
- enabled
- Названия включённых встроенных компонентов оболочки.
- export
- Названия экспортируемых переменных оболочки. Они также могут быть определены с помощью -e.
- file
- Названия файлов. Они также могут быть определены с помощью -f.
- function
- Названия функций оболочки.
- group
- Названия групп. Для этого также может использоваться -g.
- helptopic
- Разделы справки, принятые во встроенной команде help.
- hostname
- Названия хостов, взятые из файла, указанного в переменной оболочки HOSTFILE.
- job
- Названия заданий, если управление заданиями активно. Также может использоваться -j.
- keyword
- Зарезервированные слова оболочки. Также может использоваться -k.
- running
- Названия запущенных заданий, если управление заданиями активно.
- service
- Названия служб. Также может использоваться -s.
- setopt
- Допустимые аргументы для опции -o для встроенной командыset.
- shopt
- Названия опций оболочки, принятые во встроенной команде shopt.
- signal
- Названия сигналов.
- stopped
- Названия остановленных заданий. Если управление заданиями активно.
- user
- Имена пользователей. Может также использоваться -u.
- variable
- Названия переменных оболочки. Может также использоваться -v.
- -C command
- Команда command выполняется в окружающей среде подоболочки, а ее выходные данные используются в качестве возможных завершений. Аргументы передаются также, как с помощью опции -F.
- -F function
- Функция оболочки function выполняется в текущей среде оболочки. Когда функция выполняется, тогда первый аргумент ($1) - это название команды, аргументы которой завершаются, второй аргумент ($2) - это завершаемое слово, а третий аргумент ($3) - это слово, предшествующее завершению в текущей командной строке. Когда она завершается, то возможные дополнения извлекаются из значения переменной массива COMPREPLY.
- -G globpat
- Шаблон расширения названия пути globpat расширен для создания возможных завершений.
- -P prefix
- Префикс prefix добавляется в начале каждого возможного завершения после того, как были применены все остальные опции.
- -S suffix
- Суффикс suffix добавляется к каждому возможному завершению после того, как были применены все остальные опции.
- -W wordlist
- Список слов wordlist разбивается с использованием символов в специальной переменной IFS в качестве разделителей, и каждое результирующее слово расширяется. В списке wordlist используются кавычки оболочки, чтобы обеспечить механизм, позволяющий словам содержать метасимволы оболочки или символы в значении IFS. Возможные варианты завершения - это элементы результирующего списка, которые соответствуют завершаемому слову.
- -X filterpat
- Шаблон filterpat - это шаблон, используемый для расширения имени пути. Он применяется к списку возможных дополнений, сгенерированному предыдущими опциями и аргументами, и каждое завершение, соответствующее filterpat, удаляется из списка. Начальный символ ! в filterpat отменяет шаблон; в этом случае любое завершение, не соответствующее filterpat, удаляется.
Возвращаемое значение равно "true", если только не указана недопустимая опция, отличная от -p или -r, не указана без аргумента name, то предпринимается попытка удалить спецификацию завершения для name, для которого не существует спецификации завершения или возникает ошибка при добавлении спецификации завершения.
- compopt [-o option] [-DEI] [+o option] [name]
- Изменяет
опции
завершения
для
каждого name
в
соответствии
с опциями
option или для
выполняемого
в данный
момент
завершения,
если
названия
name не
указаны.
Если опции
option не
указаны, то
отображает
опции
завершения
для
каждого
названия
name или
текущего
завершения.
Возможными
значениями
опций option
являются
значения,
которые
действительны
для
встроенной
команды complete,
описанной
выше. Опция
-D
указывает,
что другие
предоставленные
опции
должны
применяться
к
завершению
команды
"по
умолчанию";
то есть к
попытке
завершения
команды,
для
которой
ранее не
было
определено
завершение.
Опция -E
указывает,
что другие
предоставленные
опции
должны
применяться
к
"пустому"
завершению
команды; то
есть к
попытке
завершения
в пустой
строке.
Опция -I
указывает
на то, что
другие
предоставленные
опции
должны
применяться
к
завершению
начального
слова в
строке, не
связанного
с
присвоением
или после
разделителя
команд,
такого как
; или |,
который
обычно
является
завершением
названия
команды.
Возвращаемое значение равно true, если только не указана недопустимая опция, не предпринята попытка изменить опции для name, для которого не существует спецификации завершения, или не произошла ошибка вывода.
- continue [n]
- Возобновить следующую итерацию замкнутого цикла for, while, until или select. Если указано значение n, то возобновить выполнение с n-го замкнутого цикла. Значение n должно быть ≥ 1. Если n больше, чем количество замыкнутых циклов, то возобновляется последний замыкающий цикл (цикл "верхнего уровня"). Возвращаемое значение равно 0, если только значение n не больше или не равно 1.
- declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]
- typeset [-aAfFgiIlnrtux] [-p] [name[=value] ...]
- Объявить переменные и/или присвоить им атрибуты. Если названия name не заданы, то отобразить значения переменных. Опция -p отобразит атрибуты и значения каждого name. Когда опция -p используется с аргументами name, тогда дополнительные опции, отличные от -f и -F, игнорируются. Если -p указана без аргументов name, то будут отображены атрибуты и значения всех переменных, имеющих атрибуты, указанные в дополнительных опциях. Если кроме в опции -p не указано никаких других опций, то в команде declare будут отображены атрибуты и значения всех переменных оболочки. Опция -f ограничит отображение функциями оболочки. Опция -F запрещает отображение определений функций; выводятся только название функции и атрибуты. Если опция оболочки extdebug включена с помощью shopt, то также отображаются название исходного файла и номер строки, в которых определено каждое значение name. Опция -F подразумевает -f. Опция -g заставляет создавать или изменять переменные в глобальной области видимости, даже если команда declare выполняется в функции оболочки. Во всех остальных случаях она игнорируется. Опция -I приводит к тому, что локальные переменные наследуют атрибуты (за исключением атрибута nameref) и значение любой существующей переменной с таким же name в окружающей области видимости. Если существующей переменной нет, то локальная переменная изначально не задана. Чтобы ограничить вывод переменными с указанным атрибутом или присвоить переменным атрибуты, можно использовать следующие опции:
- -a
- Каждая переменная name является индексированной переменной массива (смотрите подраздел Массивы above).
- -A
- Каждая name является переменной ассоциативного массива (смотрите Массивы above).
- -f
- Использовать только названия функций.
- -i
- Переменная обрабатывается как целое число; арифметическое значение (смотрите в разделе АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ above) выполняется, когда переменной присваивается значение.
- -l
- Когда переменной присваивается значение, все символы верхнего регистра преобразуются в строчные. Атрибут верхнего регистра отключен.
- -n
- Присвоить каждой переменной name атрибут nameref, сделав его ссылкой на другую переменную. Эта другая переменная определяется значением name. Все ссылки, присвоения и модификации атрибутов name, за исключением тех, которые используют или изменяют сам атрибут -n, выполняются для переменной, на которую ссылается значение name. Атрибут nameref не может быть применен к переменным массива.
- -r
- Сделать названия name доступными только для чтения. В этом случае этим названиям нельзя будет присвоить значения с помощью последующих инструкций присваивания или отменить их.
- -t
- Присвоить каждому name атрибут trace. Отслеживаемые функции наследуют ловушки DEBUG и RETURN от вызывающей оболочки. Атрибут trace не имеет специального значения для переменных.
- -u
- Когда переменной присваивается значение, все строчные символы преобразуются в прописные. Атрибут нижнего регистра отключен.
- -x
- Пометить названия nameдля экспорта в последующие команды через окружающую среду.
Использование "+" вместо "-" отключает атрибут, за исключением того, что +a и +A не могут использоваться для уничтожения переменных массива, а +r не удаляет атрибут только для чтения. При использовании в функции, команды declare и typeset делают каждое name локальным, как и в случае с командой local, если только не указана опция -g. Если за названием переменной следует =value, то значение переменной устанавливается равным value. При использовании -a или -A и синтаксиса составного присваивания для создания переменных массива дополнительные атрибуты вступают в силу только после их присвоения. Возвращаемое значение равно 0, если не обнаружена недопустимая опция, тогда предпринимается попытка определить функцию с помощью ``-f foo=bar'', попытки присвоить значение переменной, доступной только для чтения, предпринимается попытка присвоить значение переменной массива без использования синтаксиса составного присвоения (смотрите Массивы above), одно из names не является допустимым названием переменной оболочки, предпринимается попытка отключить статус только для чтения для переменной только для чтения, предпринимается попытка отключить статус массива для переменной массива или предпринимается попытка отобразить несуществующую функцию с помощью -f.
- dirs [-clpv] [+n] [-n]
- При отсутствии опций отображается список сохраненных в данный момент каталогов. По умолчанию отображается одна строка с названиями каталогов, разделенными пробелами. Каталоги добавляются в список с помощью команды pushd; команда popd удаляет записи из списка. Текущий каталог всегда является первым каталогом в стеке.
- -c
- Очищает стек каталогов, удаляя все записи.
- -l
- Создается список с использованием полных путей; формат списка по умолчанию использует тильду для обозначения домашнего каталога.
- -p
- Вывести стек каталогов с одной записью в строке.
- -v
- Вывести стек каталогов с одной записью в строке, добавляя к каждой записи ее индекс в стеке.
- +n
- Вывести на дисплей n-ю запись, начиная с левой части списка, отображаемого с помощью dirs при вызове без опций, начиная с нуля.
- -n
- Отобразить n-ю запись, начиная с правой части списка, отображаемого с помощью dirs при вызове без опций, начинает с нуля.
Возвращаемое значение равно 0, если только не указана недопустимая опция или если n не индексирует за пределы окончания стека каталогов.
- disown [-ar] [-h] [jobspec ... | pid ... ]
- Если нет опций, то удалить все задания jobspec из таблицы активных заданий. Если jobspec отсутствует и не указана ни опция -a, ни опция -r, то используется текущее задание current job. Если задана опция -h, то каждое jobspec не удаляется из таблицы, а помечается так, чтобы SIGHUP не отправлялся заданию, если оболочка получает SIGHUP. Если jobspec не указано, то опция -a означает удаление или пометку всех заданий; опция -r без аргумента jobspec ограничивает работу только запущенных заданий. Возвращаемое значение равно 0, если только в jobspec не указано не допустимое задание.
- echo [-neE] [arg ...]
- Вывести аргументы arg, разделенные пробелами, за которыми следует новая строка. Возвращаемый статус равен 0, если не возникает ошибки записи. Если указано значение -n, то завершающий символ новой строки не отображается. Если задана опция -e, то будет включена интерпретация следующих символов, экранированных обратной косой чертой. Опция -E отключает интерпретацию этих экранирующих символов даже в системах, где они интерпретируются по умолчанию. Опция оболочки xpg_echo может использоваться для динамического определения того, расширяет ли echo эти escape-символы по умолчанию. echo не интерпретирует значение -- как окончание опций. echo интерпретирует следующие управляющие последовательности:
- \a
- сигнал тревоги (сирена)
- \b
- возврат на один символ
- \c
- подавлять дальнейший вывод
- \e
- \E
- экранирующий символ
- \f
- новая страница
- \n
- новая строка
- \r
- возврат каретки
- \t
- горизонтальная табуляция
- \v
- вертикальная табуляция
- \\
- обратная косая черта
- \0nnn
- восьмиразрядный символ, значением которого является восьмеричное значение nnn (от нуля до трех восьмеричных цифр)
- \xHH
- восьмибитный символ, значением которого является шестнадцатеричное значение HH (одна или две шестнадцатеричные цифры)
- \uHHHH
- символ Юникода (ISO/IEC 10646), значением которого является шестнадцатеричное значение HHHH (от одной до четырех шестнадцатеричных цифр).
- \UHHHHHHHH
- символ Юникода (ISO/IEC 10646), значением которого является шестнадцатеричное значение HHHHHHHH (от одной до восьми шестнадцатеричных цифр)
- enable [-a] [-dnps] [-f filename] [name ...]
- Включение и отключение встроенных команд оболочки. Отключение встроенной команды позволяет выполнять дисковую команду, которая имеет то же название, что и встроенная команда оболочки, без указания полного пути, хотя оболочка обычно выполняет поиск встроенных команд прежде, чем дисковых команд. Если используется -n, то каждое name отключается; в противном случае names включается. Например, чтобы использовать двоичный файл test, то найденный с помощью PATH, вместо встроенной версии оболочки, запустит ``enable -n test''. Опция -f означает загрузку новой встроенной команды name из общего объекта filename в системах, поддерживающих динамическую загрузку. Bash будет использовать значение переменной BASH_LOADABLES_PATH в качестве списка каталогов, разделенных двоеточием, в которых нужно искать filename. Значение по умолчанию зависит от системы. Опция -d приведет к удалению встроенной команды, ранее загруженной с помощью опции -f. Если аргументы name не указаны или если указана опция -p, то будет выведен список встроенных команд оболочки. Без каких-либо других аргументов опций список состоит из всех включенных встроенных команд оболочки. Если указано значение -n, то выводятся только отключенные встроенные команды. Если указано значение -a, то выводимый список будет включать все встроенные команды с указанием того, включена каждая из них или нет. Если указано значение -s, то вывод будет ограничен встроенными командами POSIX special. Если опции не указаны, a name не является встроенной командой оболочки, то enable попытается загрузить name из общего объекта с названием name, как если бы команда была ``enable -f name name . Возвращаемое значение равно 0, если только name не является встроенным в оболочку или не произошла ошибка при загрузке нового встроенного файла из общего объекта.
- eval [arg ...]
- Эти аргументы arg считываются и объединяются в одну команду. Затем эта команда считывается и выполняется оболочкой, а ее статус завершения возвращается в виде значения eval. Если нет аргументов args или есть только нулевые аргументы, то eval возвращает 0.
- exec [-cl] [-a name] [command [arguments]]
- Если указана команда command, то она заменяет оболочку. Новый процесс не создается. Аргументы arguments становятся аргументами для command. Если указана опция -l, то оболочка ставит тире в начале нулевого аргумента, передаваемого в command. Это то, что делает login(1). Опция -c приводит к тому, что command выполняется в пустой окружающей среде. Если указано значение -a, то оболочка передает name в качестве нулевого аргумента выполняемой команде. Если по какой-либо причине command не может быть выполнена, то завершается работа неинтерактивной оболочки, если только не включена опция оболочки execfaill. В этом случае она возвращает ошибку. Интерактивная оболочка возвращает ошибку, если файл не может быть выполнен. Подоболочка завершает работу безоговорочно, если exec завершается ошибкой. Если command не указана, то любые перенаправления вступают в силу в текущей оболочке, а статус возврата равен 0. Если возникает ошибка перенаправления, то статус возврата равен 1.
- exit [n]
- Приводит к завершению работы оболочки со статусом n. Если n опущено, то статус завершения соответствует последней выполненной команде. Перед завершением работы оболочки выполняется перехват на EXIT.
- export [-fn] [name[=word]] ...
- export -p
- Введенные names помечаются для автоматического экспорта в окружающую среду последующих выполняемых команд. Если задана опция -f, то names относятся к функциям. Если названия names не указаны или если указана опция -p, то выводится список названий всех экспортируемых переменных. Опция -n приводит к удалению свойства экспортирования из каждого name. Если за названием переменной следует =word, то значение переменной устанавливается равным слову word. Команда export возвращает статус завершения, равный 0, если не обнаружена недопустимая опция, или одно из names не является не допустимым названием переменной оболочки, или если -f содержит название name, которое не является функцией.
- fc [-e ename] [-lnr] [first] [last]
- fc -s [pat=rep] [cmd]
- Первая
форма
выбирает
диапазон
команд от
первого
значения
first до
последнего
last из
списка
истории и
отображает
или
редактирует
и повторно
их
выполняет.
Значения
First и last могут
быть
указаны в
виде
строки
(чтобы
найти
последнюю
команду,
начинающуюся
с этой
строки) или
в виде
числа
(индекса в
списке
истории,
где
отрицательное
число
используется
как
смещение
от номера
текущей
команды). В
списке first
или last 0
эквивалентно
-1, а -0
эквивалентно
текущей
команде
(обычно
команде fc);
в
противном
случае 0
эквивалентно
-1, а -0
недопустимо.
Если
значение
last не
указано, то
оно
устанавливается
на текущую
команду
для вывода
списка
(чтобы ``fc -l -10''
вывести
последние
10 команд), а в
противном
случае,
вывести first.
Если first не
указано, то
для
редактирования
используется
предыдущая
команда, а
для вывода
-16.
Опция -n не указывает номера команд при выводе. Опция -r изменяет порядок следования команд. Если задана опция -l, то команды отображаются в стандартном выводе. В противном случае для файла, содержащего эти команды, вызывается редактор, указанный в ename. Если опция ename не задана, то используется значение переменной FCEDIT и значение переменной EDITOR, если FCEDIT не задано. Если ни одна из переменных не задана, vi то используется. Когда редактирование завершено, отредактированные команды воспроизводятся и выполняются.
Во второй форме команда command выполняется повторно после того, как каждый экземпляр pat заменяется на rep. Команда Command интерпретируется так же, как first выше. Полезным псевдонимом для этого является ``r="fc -s"'', чтобы при вводе ``r cc'' запускать последнюю команду, начинающуюся с ``cc'' и выводить ``r'' повторно для выполнения команду.
Если используется первая форма, то возвращаемое значение равно 0, если только не встречается недопустимая опция или если first или last не указывают строки истории вне диапазона. Если указана опция -e, то возвращаемым значением будет значение последней выполненной команды или ошибка, если произойдет ошибка с временным файлом команд. Если используется вторая форма, то возвращаемый статус - это статус повторного выполнения команды, если только в cmd не указана не допустимая строка истории, и в этом случае fc возвращает ошибку.
- fg [jobspec]
- Вывести задание jobspec на передний план и сделать его текущим заданием. Если задание jobspec отсутствует, то использовать представление оболочки о текущем задании current job. Возвращаемое значение соответствует команде, помещенной на передний план или ошибке при запуске, когда управление заданиями отключено, или при запуске с включенным управлением заданиями, если jobspec не указывает допустимое задание, или jobspec указывает задание, которое было запущено без управления заданиями.
- getopts optstring name [arg ...]
- Команда getopts
используется
процедурами
оболочки
для
анализа
позиционных
параметров.
Команда optstring
содержит
символы
опций,
которые
должны
быть
распознаны;
если за
символом
следует
двоеточие,
то
ожидается,
что у опции
будет
аргумент,
который
должен
быть
отделен от
неё
пробелом.
Символы
двоеточия
и
вопросительного
знака не
могут
использоваться
в качестве
дополнительных
символов.
Каждый раз,
когда это
вызывается,
то getopts
помещает
следующую
опцию в
переменную
оболочки
name,
инициализируя
name, если оно
не
существует,
то индекс
следующего
обрабатываемого
аргумента
помещается
в
переменную
OPTIND. OPTIND
инициализируется
значением 1
при каждом
вызове
оболочки
или
сценария
оболочки.
Когда для
опции
требуется
аргумент,
то getopts
помещает
этот
аргумент в
переменную
OPTARG.
Оболочка
не
сбрасывает
OPTIND
автоматически;
эта
переменная
должна
быть
сброшена
вручную
между
несколькими
вызовами
getopts в рамках
одного и
того же
вызова
оболочки,
если
необходимо
использовать
новый
набор
параметров.
При обнаружении конца опций getopts завершает работу с возвращаемым значением, превышающим ноль. Для OPTIND задается индекс первого аргумента, не содержащего опцию, а для name задается значение ?.
Команда getopts обычно анализирует позиционные параметры, но если в качестве значений arg указано больше аргументов, то вместо этого getopts анализирует их.
Команда getopts может сообщать об ошибках двумя способами. Если первый символ optstring является двоеточием, то используется "тихое"сообщение об ошибке silent. При нормальной работе диагностические сообщения выводятся при обнаружении недопустимых параметров или отсутствующих аргументов опции. Если переменной OPTERR присвоено значение 0, то сообщения об ошибках отображаться не будут, даже если первый символ optstring не является двоеточием.
Если отображается недопустимая опция, то getopts помещает символ ? в name и, если не задано, то выводит сообщение об ошибке и сбрасывает значение OPTARG. Если значение getopts не задано, то найденный символ опции помещается в поле OPTARG и диагностическое сообщение не выводится.
Если требуемый аргумент не найден, а getopts не "тихая", то в поле name ставится вопросительный знак (?), значение OPTARG не задаётся, и выводится диагностическое сообщение. Если getopts не задана, то в поле name ставится двоеточие (:), а в поле OPTARG устанавливается значение найденного символа опции.
getopts возвращает значение true, если найдена указанная или неуказанная опция. Возвращает значение false, если обнаружен конец списка опций или возникает ошибка.
- hash [-lr] [-p filename] [-dt] [name]
- Каждый раз, когда вызывается hash, тогда полный путь к команде name определяется путем поиска в каталогах в $PATH и запоминается. Все ранее записанные пути отбрасываются. Если указана опция -p, то поиск по пути не выполняется, и в качестве полного названия файла команды используется filename. Опция -r приводит к тому, что оболочка забывает все запомненные местоположения. Опция -d приводит к тому, что оболочка забывает запомненное местоположение каждого name. Если указана опция -t, то выводится полный путь, которому соответствует каждое название name. Если в качестве опции -t указано несколько аргументов name, то перед хэшированным полным путем выводится name. Опция -l приводит к отображению выходных данных в формате, который может быть повторно использован в качестве входных данных. Если аргументы не указаны или указана только -l, то выводится информация о запоминаемых командах. Возвращаемый статус равен true, если только name не найдено или не указана недопустимая опция.
- help [-dms] [pattern]
- Отобразить информацию об использовании встроенных команд. Если указан шаблон pattern, то в help отображается подробная справка по всем командам, соответствующим pattern; в противном случае выводится справка по всем встроенным командам и управляющим структурам оболочки.
- -d
- Вывести на дисплей описание каждого шаблона pattern
- -m
- Вывести на дисплей описание каждого шаблона pattern в формате, подобном странице руководства (manpage)
- -s
- Вывести на дисплей только обзор об использовании для каждого шаблона pattern
Возвращаемый статус равен 0, если только ни одна команда не соответствует шаблону pattern.
- history [n]
- history -c
- history -d offset
- history -d start-end
- history -anrw [filename]
- history -p arg [arg ...]
- history -s arg [arg ...]
- Если опций нет, то выводит на дисплей список истории команд с номерами строк. Строки, указанные через *, были изменены. В аргументе n указаны только последние n строк. Если переменная оболочки HISTTIMEFORMAT установлена и не равна нулю, то она используется в качестве строки формата strftime(3) для вывода временной метки, связанной с каждой выводимой записью истории. Между отформатированной меткой времени и строкой истории не выводится промежуточный пробел. Если указано значение filename, то оно используется в качестве названия файла истории; если значение не указано, то используется значение HISTFILE. Опции, если они указаны, имеют следующие значения:
- -c
- Очистить список истории, удалив все записи.
- -d offset
- Удалить запись истории в позиции offset. Если значение offset отрицательное, то оно интерпретируется как относительное значение, на единицу превышающее последнюю позицию в истории, поэтому отрицательные индексы отсчитываются от конца истории, а индекс, равный -1, относится к текущей команде history -d.
- -d start-end
- Удалите диапазон записей истории между позициями start и end включительно. Положительные и отрицательные значения для start и end интерпретируются так, как описано выше.
- -a
- Добавить "новые" строки истории в файл истории. Это строки истории, введенные с начала текущего сеанса bash, но еще не добавленные в файл истории.
- -n
- Прочитать строки истории, которые еще не были прочитаны из файла истории, в текущий список истории. Это строки, добавленные в файл истории с начала текущего сеанса bash.
- -r
- Прочитать содержимое файла истории и добавить его в текущий список истории.
- -w
- Записать текущий список истории в файл истории, перезаписав содержимое файла истории.
- -p
- Выполнить подстановку истории в следующие аргументы args и вывести результат на стандартный вывод. Результаты не сохраняются в списке истории. Каждый аргумент arg должен быть заключен в кавычки, чтобы отключить обычное расширение истории.
- -s
- Сохранить args в списке истории как отдельную запись. Последняя команда в списке истории удаляется перед добавлением аргументов args.
Если задана переменная HISTTIMEFORMAT, то информация о метке времени, связанная с каждой записью истории, записывается в файл истории, помеченная символом комментария к истории. При чтении файла истории строки, начинающиеся с символа комментария к истории, за которым сразу следует цифра, интерпретируются как временные метки для следующей записи истории. Возвращаемое значение равно 0, если только не задана недопустимая опция, не произошла ошибка при чтении или записи файла истории, в качестве аргумента для -d указано недопустимое значение offset или диапазон, или не завершилось ошибкой расширение истории, указанное в качестве аргумента для -p.
- jobs [-lnprs] [ jobspec ... ]
- jobs -x command [ args ... ]
- В первой форме перечислены активные задания. Параметры имеют следующие значения:
- -l
- Список идентификаторов процессов в дополнение к обычной информации.
- -n
- Выводить на дисплей информацию только о заданиях, статус которых изменился с момента последнего уведомления пользователя об их статусе.
- -p
- Указать только идентификатор главного процесса заданий группы процессов.
- -r
- Выводить на дисплей только запущенные задания.
- -s
- Выводить на дисплей только остановленные задания.
Если указано значение спецификации задания jobspec, то вывод будет ограничен информацией об этом задании. Статус возврата равен 0, если только не обнаружена недопустимая опция или не указано недопустимое jobspec.
Если указана опция -x, то jobs заменяет любое jobspec, найденным значением в command или args, на соответствующий идентификатор группы процессов и выполняет command, передавая её args, возвращая статус завершения.
- kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
- kill -l|-L [sigspec | exit_status]
- Отправить сигнал с названием sigspec или signum процессам с названием pid или jobspec. Сигнал sigspec - это либо название сигнала без учета регистра, такое как SIGKILL (с префиксом SIG или без него), либо номер сигнала; signum - это номер сигнала. Если sigspec отсутствует, то предполагается SIGTERM. В аргументе -l перечислены названия сигналов. Если при задании аргумента -l указываются какие-либо аргументы, то перечисляются название сигналов, соответствующих аргументам, и статус возврата равен 0. Аргумент exit_status для -l - это число, указывающее либо номер сигнала, либо статус завершения процесса, завершенного сигналом. Опция -L эквивалентна опции -l. Опция kill возвращает значение true, если хотя бы один сигнал был успешно отправлен, или значение false, если произошла ошибка или обнаружена недопустимая опция.
- let arg [arg ...]
- Каждый аргумент arg является арифметическим выражением, которое должно быть вычислено (смотрите раздел АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ above). Если последнее значение arg равно 0, то let возвращает 1; в противном случае возвращается 0.
- local [option] [name[=value] ... | - ]
- Для каждого аргумента создается локальная переменная с названием name, которой присваивается значение value. Опция option I может быть любой опцией, из объявленных в команде declare. Когда команда local используется внутри функции, тогда это приводит к тому, что переменная name имеет видимую область действия, ограниченную этой функцией и ее дочерними элементами. Если name это - набор опций оболочки, то это становится локальным для функции, в которой вызывается local: опции оболочки, измененные в функции с помощью встроенной команды set, восстанавливаются до их исходных значений при возврате функции. Восстановление выполняется так, как если бы была выполнена серия команд set для восстановления значений, которые существовали до запуска функции. При отсутствии операндов local записывает список локальных переменных в стандартный вывод. Использование команды local вне функции является ошибкой. Возвращаемый статус равен 0, если только local не используется вне функции, не указано недопустимое name или name не является переменной, доступной только для чтения.
- logout
- Выйти из оболочки.
- mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
- readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
- Прочитать строки из стандартного ввода в переменную индексированного массива array или из файлового дескриптора fd, если указана опция -u. Переменная MAPFILE по умолчанию является array. Опции, если они указаны, имеют следующие значения:
- -d
- Первый символ delim используется для завершения каждой строки ввода, а не для перевода строки. Если delim является пустой строкой, то mapfile завершит строку, когда будет считан символ NUL.
- -n
- Скопировать не более строк count. Если значение count 0, то будут скопированы все строки.
- -O
- Начать присвоение массиву array с индексом origin. Индекс по умолчанию равен 0.
- -s
- Отбросить первые прочитанные строки count.
- -t
- Удалить завершающий символ delim (новая строка по умолчанию) из каждой прочитанной строки.
- -u
- Считывать строки из файлового дескриптора fd вместо стандартного ввода.
- -C
- Вычислять callback при каждом чтении строк quantum. Опция -c указывает quantum.
- -c
- Указывать количество строк, прочитанных между каждым вызовом callback.
Если -C указано без -c, то значение по умолчанию равно 5000. При вычислении значения "обратный вызов" callback в качестве дополнительных аргументов указывается индекс следующего элемента массива, который должен быть назначен, и строка, которая должна быть назначена этому элементу. callback вычисляется после чтения строки, но до назначения элемента массива.
Если не указано явное происхождение, то mapfile очистит массив array перед назначением ему.
mapfile возвращает значение успешно, если только не указана недопустимая опция или аргумент опции array не является недопустимым, или не назначаемым, или если array не является индексированным массивом.
- popd [-n] [+n] [-n]
- Удалить записи из стека каталогов. Элементы нумеруются с 0, начиная с первого каталога, указанного в dirs. Без каких-либо аргументов, команда popd удаляет верхний каталог из стека и изменяет его на новый верхний каталог. Аргументы, если они указаны, имеют следующие значения:
- -n
- Подавляет обычное изменение каталога при удалении каталогов из стека, таким образом управляется только стек.
- +n
- Удаляет из стека n-ю запись, начиная с нуля, считая слева от списка, показанного с помощью dirs. Например: ``popd +0'' удаляет первый каталог, ``popd +1'' затем второй.
- -n
- Удаляет n-ю запись, отсчитываемую справа из списка, показанного с помощью dirs, начиная с нуля. Например: ``popd -0'' удаляет последний каталог, ``popd -1'' затем, предпоследний.
Если верхний элемент стека каталогов изменен, а значение -n не было указано, то popd использует встроенную команду cd для перехода к каталогу, расположенному в верхней части стека. Если cd завершается ошибкой, то popd возвращает ненулевое значение.
В противном случае, команда popd возвращает значение false, если задана недопустимая опция, стек каталогов пуст или указана несуществующая запись в стеке каталогов.
Если команда popd выполнена успешно, то bash запускает dirs, чтобы отобразить окончательное содержимое стека каталогов и возвращаемый статус равен 0.
- printf [-v var] format [arguments]
- Выводит
отформатированные
аргументы
arguments на
стандартный
вывод под
управлением
команды format.
Опция -v
приводит к
тому, что
выходные
данные
присваиваются
переменной
var, а не
выводятся
на
стандартный
вывод.
Значение format - это символьная строка, содержащая объекты трех типов: обычные символы, которые просто копируются на стандартный вывод, управляющие последовательности символов, которые преобразуются и копируются на стандартный вывод и спецификации формата, каждая из которых приводит к выводу следующего за ней аргумента argument. В дополнение к стандартным спецификациям формата printf(1), printf интерпретирует следующие расширения:
- %b
- приводит к тому, что printf расширяет управляющие последовательности с обратной косой чертой в соответствующем аргументе argument таким же образом, как и echo -e.
- %q
- приводит к тому, что printf выводит соответствующий аргумент argument в формате, который может быть повторно использован в качестве входных данных оболочки.
- %Q
- тоже, что и %q, но применяет любую указанную точность к аргументу argument, прежде чем заключать его в кавычки.
- %(datefmt)T
- приводит к тому, что printf выводит строку даты и времени, полученную в результате использования datefmt в качестве строки формата для strftime(3). Соответствующий аргумент argument - это целое число, представляющее количество секунд, прошедших с начала эпохи. Могут использоваться два специальных значения аргумента: -1 представляет текущее время и -2 - время вызова оболочки. Если аргумент не указан, то преобразование выполняется так, как если бы было задано значение -1. Это исключение из обычного поведения printf.
Все директивы %b, %q и %T используют аргументы ширины поля и точности из спецификации формата и записывают это количество байт из расширенного аргумента, который обычно содержит больше символов, чем исходный формат (или используют поле такой ширины).
Аргументы для спецификаторов нестрокового формата обрабатываются как константы языка Си, за исключением того, что допускается использование начального знака плюс или минус, и если начальный символ представляет собой одинарную или двойную кавычку, то значением является значение ASCII следующего символа.
Формат format используется повторно по мере необходимости для всех аргументов arguments. Если для формата format требуется больше аргументов arguments, чем указано, то дополнительные спецификации формата ведут себя так, как если бы было указано нулевое значение или нулевая строка, в зависимости от обстоятельств. Возвращаемое значение равно нулю в случае успеха и ненулевому значению в случае неудачи.
- pushd [-n] [+n] [-n]
- pushd [-n] [dir]
- Добавляет каталог на вершину стека каталогов или поворачивает стек, превращая новую вершину стека в текущий рабочий каталог. При отсутствии аргументов команда pushd заменяет два верхних элемента стека каталогов. Аргументы, если они указаны, имеют следующие значения:
- -n
- Подавляет обычную смену каталога при ротации или добавлении каталогов в стек, так что управляется только стек.
- +n
- Поворачивает стек так, чтобы n-й каталог (считая слева от списка, показанного dirs, начиная с нуля) находился вверху.
- -n
- Поворачивает стек так, чтобы n-й каталог (считая справа от списка, показанного dirs, начиная с нуля) находился вверху.
- dir
- Добавляет каталог dir в стек каталогов сверху
После изменения стека, если опция -n не была указана, то pushd использует встроенную команду cd для перехода в каталог, расположенный в верхней части стека. Если cd завершается ошибкой, то pushd возвращает ненулевое значение.
В противном случае, если аргументы не указаны, то команда pushd возвращает 0, если только стек каталогов не пуст. При смене стека каталогов pushd возвращает 0, если только стек каталогов не пуст или не указан несуществующий элемент стека каталогов.
Если команда pushd выполнена успешно, то оболочка bash запускает dirs, чтобы отобразить окончательное содержимое стека каталогов.
- pwd [-LP]
- Вывести абсолютный путь к текущему рабочему каталогу. Выведенное название пути не содержит символических ссылок, если указана опция -P или включена опция -o physical для встроенной команды set. Если используется опция -L, то выводимый путь может содержать символьные ссылки. Возвращаемый статус равен 0, если только при чтении названия текущего каталога не возникает ошибка или не указана недопустимая опция.
- read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
- Одна строка считывается из стандартного ввода или из файлового дескриптора fd, предоставленного в качестве аргумента опции -u, и разбивается на слова, как описано above в подразделе Разделение слов, и первое слово присваивается первому name, второе слово - второму name и так далее. Если слов больше, чем названий, то оставшиеся слова и разделители между ними присваиваются последнему name. Если из входного потока считывается меньше слов, чем названий, то оставшимся названиям присваиваются пустые значения. Символы в IFS используются для разделения строки на слова с использованием тех же правил, которые оболочка использует для расширения (описано above в подразделе Разделение слов). Символ обратной косой черты (\) может использоваться для удаления любого специального значения при чтении следующего символа и для продолжения строки. Опции, если они указаны, имеют следующие значения:
- -a aname
- Слова присваиваются последовательным индексам переменной массива aname, начиная с 0. Значение aname не задается до присвоения каких-либо новых значений. Другие аргументы name игнорируются.
- -d delim
- Первый символ delim используется для завершения строки ввода, а не для перевода строки. Если delim является пустой строкой, то команда read завершит строку, когда будет считан символ NUL.
- -e
- Если стандартный ввод поступает с терминала, то readline (смотрите раздел БИБЛИОТЕКА READLINE above) используется для получения строки. Библиотека Readline использует текущие настройки редактирования (или настройки по умолчанию, если редактирование строки ранее не было активным), но использует, по умолчанию, завершение названия файла readline.
- -i text
- Если для чтения строки используется readline, то text помещается в буфер редактирования перед началом редактирования.
- -n nchars
- Команда read возвращает значение после прочтения символов nchars, не дожидаясь полной строки ввода, но с учетом разделителя, если перед разделителем прочитано меньше, чем nchars символов.
- -N nchars
- Команда read возвращает значение после прочтения ровно nchars символов, а не после ожидания полной строки ввода, если только не обнаружен EOF или время ожидания read не истекло. Символы-разделители, встречающиеся во входных данных, не обрабатываются специальным образом и не вызывают возврата read до тех пор, пока не будут прочитаны символы nchars. Результат не разбивается на символы в IFS; цель состоит в том, чтобы переменной присваивались именно те символы, которые считываются (за исключением обратной косой черты; смотрите опцию -r ниже).
- -p prompt
- Выводить prompt на стандартный вывод ошибок без перевода строки в конце, прежде чем пытаться прочитать какие-либо входные данные. Запрос отображается только в том случае, если входные данные поступают с терминала.
- -r
- Обратная косая черта не используется в качестве экранирующего символа. Обратная косая черта считается частью строки. В частности, пара обратная косая черта-новая строка не может использоваться в качестве продолжения строки.
- -s
- "Тихий" режим. Если ввод данных осуществляется с терминала, символы не отображаются.
- -t timeout
- Выводит команду read на тайм-аут и возвращает ошибку, если полная строка ввода (или указанное количество символов) не считывается в течение timeout секунд тайм-аута. Тайм-аут timeout может быть десятичным числом с дробной частью, следующей за запятой. Эта опция действует только в том случае, если read считывает входные данные из терминала, конвейера или другого специального файла; она не имеет никакого эффекта при чтении из обычных файлов. Если время ожидания read истекло, то read сохранит все частичные входные данные, считанные в указанную переменную name. Если timeout равно 0, то read немедленно возвращается, не пытаясь прочитать какие-либо данные. Статус завершения равен 0, если для указанного файлового дескриптора доступны входные данные, или при чтении будет возвращено значение EOF, отличное от нуля, в противном случае. Статус завершения превышает 128, если превышен тайм-аут.
- -u fd
- Считывание входных данных из файлового дескриптора fd.
Если не указано значение names, то прочитанная строка будет без конечного разделителя, но в остальном без изменений и присваивается переменной REPLY. Статус завершения равен нулю, если только не обнаружен конец файла, превышено время ожидания read (в этом случае статус выхода превышает 128), ошибка определения переменной (например, присвоение значения переменной, доступной только для чтения) или указан неверный файловый дескриптор в качестве аргумента для -u.
- readonly [-aAf] [-p] [name[=word] ...]
- Предоставленные значения names помечены как доступные только для чтения; значения этих names не могут быть изменены при последующем присвоении. Если указана опция -f, то функции, соответствующие значениям names, будут помечены таким образом. Опция -a ограничивает переменные индексированными массивами; опция -A ограничивает переменные ассоциативными массивами. Если указаны обе опции, то приоритет имеет опция -A. Если аргументы name не указаны или если указана опция -p, то выводится список всех названий, доступных только для чтения. Другие опции могут использоваться для ограничения вывода подмножества набора названий, доступных только для чтения. Опция -p приводит к отображению выходных данных в формате, который может быть повторно использован в качестве входных данных. Если за названием переменной следует =word, то значение переменной устанавливается равным слову word. Возвращаемый статус равен 0, если только не обнаружен недопустимая опция, одно из значений names не является допустимым названием переменной оболочки или -f содержит значение name, которое не является функцией.
- return [n]
- Вызывает остановку выполнения функции и возвращает вызывающей стороне значение, указанное в n. Если n опущено, то возвращаемый статус соответствует последней команде, выполненной в теле функции. Если return выполняется обработчиком ловушек, то последняя команда, используемая для определения статуса, является последней командой, выполненной перед обработчиком ловушек. Если return выполняется во время перехвата DEBUG, то последней командой, используемой для определения статуса, является последней командой, выполненной обработчиком ловушек перед вызовом return. Если return используется вне функции, но во время выполнения скрипта командой . (source), то это приводит к тому, что оболочка прекращает выполнение этого скрипта и возвращает либо n, либо статус завершения последней команды, выполненной в скрипте, в виде статуса завершения работы скрипта. Если указано значение n, то возвращаемое значение равно его младшим 8 битам. Статус возврата отличен от нуля, если return задается в качестве нечислового аргумента или используется вне функции, а не во время выполнения скрипта с помощью . или source. Любая команда, связанная с ловушкой RETURN, выполняется до того, как выполнение возобновится после выполнения функции или скрипта.
- set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]
- set [+abefhkmnptuvxBCEHPT] [+o option-name] [--] [-] [arg ...]
- Без опций выводит на дисплей название и значение каждой переменной оболочки в формате, который можно повторно использовать в качестве входных данных для ввода или сброса текущих переменных. Переменные, доступные только для чтения, не могут быть сброшены. В режиме posix mode отображаются только переменные оболочки. Выходные данные сортируются в соответствии с текущей локалью. Если заданы опции, то они устанавливают или отменяют установку атрибутов оболочки. Все аргументы, оставшиеся после обработки опций, рассматриваются как значения позиционных параметров и присваиваются по порядку $1, $2, ... $n. Опции, если они указаны, имеют следующие значения:
- -a
- Каждой создаваемой или изменяемой переменной или функции присваивается атрибут export, который помечается для экспорта в окружающую среду последующих команд.
- -b
- Сообщать о состоянии завершенных фоновых заданий немедленно, а не до следующего основного запроса. Это действует только при включенном управлении заданиями.
- -e
- Немедленно
завершить
работу,
если
используется
конвейер
pipeline (который
может
состоять
из одной
простой
команды simple
command), списка
listили
составной
команды compound
command
(смотрите
раздел
ГРАММАТИКА
ОБОЛОЧКИ
above),
завершает
работу с
ненулевым
статусом.
Оболочка
не
завершает
работу,
если
команда,
которая
завершилась
ошибкой,
является
частью
списка
команд,
следующего
непосредственно
за
ключевым
словом while
или until,
частью
теста,
следующего
за
зарезервированными
словами if
или elif,
частью
любой
команды,
выполняемой
в списке
&& или ||, за
исключением
команды,
следующей
за
последней
&& или ||,
любой
команды в
конвейере,
кроме
последней
или если
возвращаемое
значение
команды
инвертируется
символом !.
Если
составная
команда,
отличная
от
подоболочки,
возвращает
ненулевой
статус
из-за
ошибки
команды, в
то время
как опция
-e
игнорировался,
то
оболочка
не
завершает
работу.
Ловушка в
ERR, если
установлена,
то она
выполняется
до
завершения
работы
оболочки.
Эта опция
применяется
к
окружающей
среде
оболочки и
к каждой
окружающей
среде
подоболочки
в
отдельности
(смотрите
раздел
ОКРУЖАЮЩАЯ
СРЕДА
ВЫПОЛНЕНИЯ
КОМАНД above),
и может
привести к
завершению
работы
подоболочек
перед
выполнением
всех
команд в
подоболочке.
Если составная команда или функция оболочки выполняется в контексте, где -e игнорируется, ни на одну из команд, выполняемых в теле составной команды или функции, не повлияет -e, даже если -e установлено и команда возвращает статус ошибки. Если составная команда или функция оболочки устанавливает значение -e при выполнении в контексте, где значение -e игнорируется, то эта настройка не будет иметь никакого эффекта до завершения выполнения составной команды или команды, содержащей вызов функции.
- -f
- Отключение расширения названия пути.
- -h
- Запоминать расположение команд при их поиске для выполнения. По умолчанию эта функция включена.
- -k
- Все аргументы в виде операторов присваивания поместить в окружающую среду команды, а не только те, которые предшествуют названию команды.
- -m
- Режим мониторинга. Включено управление заданиями. Эта опция включена по умолчанию для интерактивных оболочек в системах, которые ее поддерживают (смотрите раздел УПРАВЛЕНИЕ ЗАДАНИЯМИ above). Все процессы выполняются в отдельной группе процессов. Когда фоновое задание завершается, тогда оболочка выводит строку, содержащую статус завершения.
- -n
- Считывать команды, но не выполнять их. Это может использоваться для проверки сценария оболочки на наличие синтаксических ошибок. Интерактивные оболочки это игнорируют.
- -o option-name
- Значение option-name может быть одним из следующих:
- allexport
- То же, что -a.
- braceexpand
- То же, что -B.
- emacs
- Использовать интерфейс редактирования командной строки в стиле emacs. Это включено по умолчанию, когда оболочка является интерактивной, если только оболочка не запускается с опцией --noediting. Это также влияет на интерфейс редактирования, используемый для read -e.
- errexit
- То же, что -e.
- errtrace
- То же, что -E.
- functrace
- То же, что -T.
- hashall
- То же,что -h.
- histexpand
- То же, что -H.
- history
- Включить журнал истории команд, как описано выше above в разделе ИСТОРИЯ. Эта опция включена по умолчанию при работе оболочки в интерактивном режиме.
- ignoreeof
- Эффект такой, как если бы команда оболочки ``IGNOREEOF=10'' была выполнена (смотрите подраздел Переменные оболочки above).
- keyword
- То же, что -k.
- monitor
- То же, что -m.
- noclobber
- То же, что -C.
- noexec
- То же, что -n.
- noglob
- То же, что -f.
- nolog
- В настоящее время игнорируется.
- notify
- То же, что -b.
- nounset
- То же, что -u.
- onecmd
- То же, что -t.
- physical
- То же, что -P.
- pipefail
- Если задано, возвращаемое значение конвейера равно значению последней (самой правой) команды, которая завершается с ненулевым статусом, или равно нулю, если все команды в конвейере завершаются успешно. По умолчанию эта опция отключена.
- posix
- Изменить поведение оболочки bash, в которой операции по умолчанию отличаются от стандарта POSIX, таким образом, чтобы они соответствовали стандарту (в режиме posix mode). Смотрите раздел СМОТРИТЕ ТАКЖЕ below для получения ссылки на документ, в котором подробно описывается, как режим posix влияет на поведение bash.
- privileged
- То же, что -p.
- verbose
- То же, что -v.
- vi
- Использовать интерфейс редактирования командной строки в стиле vi. Это также влияет на интерфейс редактирования, используемый для read -e.
- xtrace
- То же, что -x.
Если -o указано без option-name, то выводятся значения текущих опций. Если +o задано без option-name, то на стандартном выводе отображается серия команд set для восстановления текущих настроек опции.
- -p
- Включить привилегированный режим privileged. В этом режиме файлы $ENV и $BASH_ENV не обрабатываются, функции оболочки не наследуются из окружающей среды, а файлы SHELLOPTS, BASHOPTS не обрабатываются. Переменные, CDPATH и GLOBIGNORE, если они появляются в окружающей среде, игнорируются. Если оболочка запущена с эффективным идентификатором пользователя (группы), который не равен реальному идентификатору пользователя (группы) и опция -p не указана, то выполняются эти действия, а в качестве эффективного идентификатора пользователя устанавливается реальный идентификатор пользователя. Если при запуске указана опция -p, то действительный идентификатор пользователя не сбрасывается. При отключении этой опции эффективные идентификаторы пользователя и группы будут заменены на реальные идентификаторы пользователя и группы.
- -r
- Включить режим ограниченного доступа оболочки. Если эта опция была установлена, её нельзя отменить.
- -t
- Завершить работу после прочтения и выполнения одной команды.
- -u
- Рассматривать неустановленные переменные и параметры, отличные от специальных параметров "@" и "*" или переменные массива, подписанные "@" или "*", как ошибку при выполнении расширения параметров. Если выполняется попытка расширения для неустановленной переменной или параметра, то оболочка выводит сообщение об ошибке и, если она не является интерактивной, то завершает работу с ненулевым статусом.
- -v
- Выводить строки ввода оболочки по мере их считывания.
- -x
- После расширения каждой простой команды simple command, команды for, команды case, команды select или арифметической команды for отобразить расширенное значение PS4, за которым следует команда и ее расширенные аргументы или связанный с ними список слов.
- -B
- Оболочка выполняет расширение скобок (смотрите подраздел Расширение скобок above). Это включено по умолчанию.
- -C
- Если задано, то оболочка bash не перезаписывает существующий файл с помощью операторов перенаправления >, >& и <>. Это может быть отменено при создании выходных файлов с помощью оператора перенаправления >| вместо >.
- -E
- Если это установлено, то любая ошибка в ERR наследуется функциями оболочки, заменами команд и командами, выполняемыми в окружающей среде подоболочки. В таких случаях ошибка ERR обычно не наследуется.
- -H
- Включить подстановку истории стилей !. Эта опция включена по умолчанию, когда оболочка является интерактивной.
- -P
- Если это установлено, то оболочка не разрешает символьные ссылки при выполнении таких команд, как cd, которые изменяют текущий рабочий каталог. Вместо этого она использует физическую структуру каталогов. По умолчанию bash следует логической цепочке каталогов при выполнении команд, которые изменяют текущий каталог.
- -T
- Если задано, то любые ловушки в DEBUG и RETURN наследуются функциями оболочки, заменами команд и командами, выполняемыми в окружающей среде подоболочки. Ловушки DEBUG и RETURN в таких случаях обычно не наследуются.
- --
- Если за этой опцией не следует никаких аргументов, то позиционные параметры не заданы. В противном случае позиционным параметрам присваиваются значения аргументов arg, даже если некоторые из них начинаются с -.
- -
- Сигнализировать об окончании выбора опций, чтобы все оставшиеся аргументы arg были назначены позиционными параметрами. Опции -x и -v отключены. Если нет аргументов arg, то позиционные параметры остаются неизменными.
По умолчанию опции отключены, если не указано иное. Использование + вместо - приводит к отключению этих опций. Опции также могут быть указаны в качестве аргументов для вызова оболочки. Текущий набор опций можно найти в $-. Возвращаемый статус всегда равен true, если только не встречается недопустимая опция.
- shift [n]
- Позиционные параметры, начиная с n+1 ... переименовываются в $1 ..... Параметры, представленные числами от $# до $#-n+1, не устанавливаются. Значение n должно быть неотрицательным числом, меньшим или равным $#. Если n равно 0, то параметры не изменяются. Если n не задано, то предполагается, что оно равно 1. Если n больше, чем $#, то позиционные параметры не изменяются. Статус возврата больше нуля, если n больше, чем $# или меньше нуля; в противном случае 0.
- shopt [-pqsu] [-o] [optname ...]
- Изменить значения настроек, управляющих необязательным поведением оболочки. Это могут быть либо те настройки, которые перечислены ниже, либо, если используется опция -o, то те, которые доступны с помощью опции -o для встроенной команды set. При отсутствии опций или при использовании опции -p отображается список всех настраиваемых опций с указанием того, установлена ли каждая из них; если указано значение optnames, то вывод ограничивается этими опциями. Опция -p приводит к отображению выходных данных в форме, которую можно повторно использовать в качестве входных данных. Другие опции имеют следующие значения:
- -s
- Включить (установить) каждое optname.
- -u
- Выключить (сбросить) каждое optname.
- -q
- Отключает обычный вывод (тихий режим); статус возврата указывает, что установлено или не установлено значение optname. Если несколько аргументов optname заданы с помощью -q, то статус возврата равен нулю, если включены все аргументы optname; в противном случае значение не равно нулю.
- -o
- Ограничивает значения optname теми значениями, которые определены для опции -o, встроенной командой set.
Если либо -s, либо -u используется без аргументов optname, то shopt отображает только те опции, которые установлены или не установлены соответственно. Если не указано иное, опции shopt по умолчанию отключены (unset).
Статус возврата в списке опций равен нулю, если включены все optnames, в противном случае он не равен нулю. При установке или отмене настроек статус возврата равен нулю, если только optnames не является допустимой опцией оболочки.
Список опций shopt выглядит следующим образом:
- assoc_expand_once
- Если это остановлено, то оболочка подавляет многократное вычисление индексов ассоциативного массива во время вычисления арифметического выражения, при выполнении встроенных команд, которые могут выполнять присвоение переменных и при выполнении встроенных команд, которые выполняют разыменование массива.
- autocd
- Если задано, название команды, являющееся названием каталога, то выполняется так, как если бы оно было аргументом команды cd. Эта опция используется только интерактивными оболочками.
- cdable_vars
- Если задано, то предполагается, что аргументом встроенной команды cd, который не является каталогом, является название переменной, значение которой является каталогом для перехода.
- cdspell
- Если это установлено, то будут исправлены незначительные ошибки в написании компоненты каталога в команде cd. Проверяемые ошибки включают в себя перестановку символов, пропущенный символ и слишком большое количество символов. Если исправление найдено, то выводится исправленное название файла и команда выполняется. Эта опция используется только интерактивными оболочками.
- checkhash
- Если установлено, то bash проверяет, существует ли команда, найденная в хэш-таблице, перед попыткой ее выполнения. Если команда в хэш-таблице больше не существует, то выполняется обычный поиск пути.
- checkjobs
- Если это установлено, то bash отображает статус всех остановленных и запущенных заданий перед выходом из интерактивной оболочки. Если какие-либо задания выполняются, то это приводит к тому, что выход откладывается до повторной попытки выхода без промежуточной команды (смотрите раздел УПРАВЛЕНИЕ ЗАДАНИЯМИ above). Оболочка всегда откладывает выход из системы, если какие-либо задания остановлены.
- checkwinsize
- Если это установлено, то bash проверяет размер окна после каждой внешней (не встроенной) команды и, при необходимости, обновляет значения LINES и COLUMNS. Эта опция включена по умолчанию.
- cmdhist
- Если это установлено, то bash попытается сохранить все строки многострочной команды в одной и той же записи истории. Это позволяет легко повторно редактировать многострочные команды. Эта опция включена по умолчанию, но действует только в том случае, если включена история команд, как описано выше above согласно HISTORY.
- compat31
- compat32
- compat40
- compat41
- compat42
- compat43
- compat44
- compat50
- Эти значения определяют режим совместимости оболочки (смотрите раздел РЕЖИМ СОВМЕСТИМОСТИ ОБОЛОЧКИ) below).
- complete_fullquote
- Если задано, то bash заключает в кавычки все метасимволы оболочки в названиях файлов и каталогов при выполнении завершения. Если значение не задано, то bash удаляет метасимволы, такие как знак доллара, из набора символов, которые будут заключены в кавычки в завершенных названиях файлов, когда эти метасимволы появятся в ссылках на переменные оболочки в словах, которые должны быть завершены. Это означает, что знаки доллара в названиях переменных, которые расширяются до каталогов, не будут заключаться в кавычки; однако любые знаки доллара, появляющиеся в названиях файлов, также не будут заключаться в кавычки. Это дейсиует только тогда, когда bash использует обратную косую черту для указания завершенных названий файлов. Эта переменная установлена по умолчанию, что является стандартным поведением bash в версиях до 4.2.
- direxpand
- Если установлено, то bash заменяет названия каталогов результатами расширения слова word при выполнении завершения названия файла. Это изменяет содержимое буфера редактирования readline. Если не установлено, то bash пытается сохранить то, что ввел пользователь.
- dirspell
- Если это установлено, то bash попытается исправить орфографию в названиях каталогов во время ввода текста, если изначально указанное название каталога не существует.
- dotglob
- Если установлено, то bash включает названия файлов, начинающиеся с ".", в результаты расширения пути. Названия файлов `." и `.." всегда должны совпадать явно, даже если задано значение dotglob.
- execfail
- Если установлено, то не интерактивная оболочка не завершит работу, если она не сможет выполнить файл, указанный в качестве аргумента встроенной команды exec. Интерактивная оболочка не завершит работу, если команда exec завершится неудачно.
- expand_aliases
- Если задано, то псевдонимы будут расширены, как описано выше above в разделе ПСЕВДОНИМЫ. Эта опция включена по умолчанию для интерактивных оболочек.
- extdebug
- Если задано при вызове оболочки или в файле запуска оболочки, то настройте выполнение профиля отладчика перед запуском оболочки, аналогично опции --debugger. Если задано после вызова, то будет включено поведение, предназначенное для использования отладчиками:
- 1.
- Опция -F для встроенной команды declare отображает название исходного файла и номер строки, соответствующие каждому названию функции, указанному в качестве аргумента.
- 2.
- Если команда, запущенная с помощью ловушки DEBUG, то возвращается ненулевое значение, следующая команда пропускается и не выполняется.
- 3.
- Если команда, запущенная с помощью ловушки DEBUG, то возвращает значение 2, а оболочка выполняет подпрограмму (функцию оболочки или сценарий оболочки, выполняемый встроенными командами . или source), то оболочка имитирует вызов return.
- 4.
- BASH_ARGC и BASH_ARGV обновляются в соответствии с их описаниями above).
- 5.
- Включена трассировка функций: подстановка команд, функции оболочки и подоболочки, вызываемые с помощью ( command ), наследуют ловушки DEBUG и RETURN.
- 6.
- Включено отслеживание ошибок: подстановка команд, функции оболочки и подоболочки, вызываемые с помощью ( command ), наследуют ловушку ERR.
- extglob
- Если установлено, то расширяются свойства сопоставления с шаблоном above описанные в подразделе Расширение названия пути.
- extquote
- Если установлено, то $'string' и $"string" заключаются в двойные кавычки внутри расширений ${parameter}. По умолчанию эта опция включена.
- failglob
- Если заданы эти шаблоны, то названия файлов, которые не совпадают с шаблонами при расширении пути, приводят к ошибке расширения.
- force_fignore
- Если значение задано, то суффиксы, заданные переменной оболочки FIGNORE, приводят к игнорированию слов при выполнении завершения, даже если игнорируемые слова являются единственно возможными завершениями. Смотрите раздел ПЕРЕМЕННЫЕ ОБОЛОЧКИ above описание FIGNORE. Эта опция включена по умолчанию.
- globasciiranges
- Если задано, то выражения диапазона, используемые в выражениях в скобках для сопоставления с шаблоном (смотрите Сопоставление с шаблоном above) при выполнении сравнений действуют так, как если бы использовался традиционная локаль С. То есть, последовательность сопоставления с текущей локалью не учитывается, поэтому b не будет сопоставляться между A и B, а символы ASCII в верхнем и нижнем регистре будут сопоставляться вместе.
- globskipdots
- Если это установлено, то расширение названия пути никогда не будет совпадать с названиями файлов `." и `..", даже когда шаблон начинается с `.". Эта опция включена по умолчанию.
- globstar
- Если задано, то шаблон **, используемый в контексте расширения названия пути, будет соответствовать всем файлам и нулю или множеству каталогов и подкаталогов. Если за шаблоном следует /, то соответствуют только каталоги и подкаталоги.
- gnu_errfmt
- Если это установлено, то сообщения об ошибках оболочки записываются в стандартном формате сообщений об ошибках GNU.
- histappend
- Если это установлено, то список истории добавляется к файлу, названному по значению переменной HISTFILE, при выходе из оболочки, а не перезаписывает файл.
- histreedit
- Если задано и используется библиотека readline, то пользователю предоставляется возможность повторно отредактировать неудачную подстановку истории.
- histverify
- Если задано и используется библиотека readline, то результаты подстановки истории не передаются немедленно в синтаксический анализатор командной строки. Вместо этого результирующая строка загружается в буфер редактирования readline, что позволяет вносить дальнейшие изменения.
- hostcomplete
- Если задано и используется библиотека readline, то bash попытается выполнить завершение названия хоста при завершении слова, содержащего @ (смотрите подраздел Завершение в разделе БИБЛИОТЕКА READLINE above). Включено по умолчанию.
- huponexit
- Если это установлено, то bash будет отправлять SIGHUP всем заданиям при выходе из интерактивной оболочки.
- inherit_errexit
- Если задано, то при замене команд наследуется значение опции errexit, а не отменяется её установка в окружающей среде подоболочки. Эта опция включена, когда включен режим posix.
- interactive_comments
- Если задано, то разрешается слову, начинающемуся с #, чтобы это слово и все остальные символы в этой строке были проигнорированы в интерактивной оболочке (смотрите раздел КОММЕНТАРИИ above). Эта опция включена по умолчанию.
- lastpipe
- Если установлено, а управление заданиями не активировано, то оболочка запускает последнюю команду конвейера, которая не выполняется в фоновом режиме в текущей окружающей среде оболочки.
- lithist
- Если это установлено и включена опция cmdhist, то многострочные команды сохраняются в журнале со встроенными символами новой строки, а не с использованием разделителей в виде точки с запятой, где это возможно.
- localvar_inherit
- Если задано, то локальные переменные наследуют значение и атрибуты переменной с таким же названием, которое существовало в предыдущей области видимости, до присвоения какого-либо нового значения. Атрибут nameref не наследуется.
- localvar_unset
- Если задано, то вызов команды unset для локальных переменных в предыдущих областях действия функции помечает их, чтобы при последующем поиске они не были заданы, пока функция не вернется. Это аналогично сбросу настроек локальных переменных в текущей области действия функции.
- login_shell
- Оболочка устанавливает эту опцию, если она запущена как оболочка входа в систему (смотрите раздел ВЫЗОВ above). Это значение не может быть изменено.
- mailwarn
- Если задано, и к файлу, который bash проверяет на наличие почты, был получен доступ с момента последней проверки, то отображается сообщение ”The mail mailfile has been read” (почта была прочитана).
- no_empty_cmd_completion
- Если задано и используется библиотека readline, то bash не будет пытаться выполнить поиск в PATH для возможных завершений при попытке завершения в пустой строке.
- nocaseglob
- Если задано, то bash сопоставляет названия файлов без учета регистра при расширении названия пути (смотрите подраздел Расширение названия пути above).
- nocasematch
- Если задано, то bash сопоставляет шаблоны без учета регистра при выполнении сопоставления во время выполнения команд проверки условий case или [[, при выполнении расширений слов для замены шаблонов или при фильтрации возможных завершений в рамках программируемого завершения.
- noexpand_translation
- Если задано, то bash заключает транслированные результаты $"..." в одинарные кавычки вместо двойных. Если строка не транслирована, то это не имеет никакого эффекта.
- nullglob
- Если задано, то bash допускает шаблоны, которые не соответствуют ни одному файлу (смотрите подраздел Расширение названия пути above) чтобы расширить до нулевой строки, а не до самих себя.
- patsub_replacement
- Если задано, то bash расширяет вхождения & в строке замены шаблона до текста, соответствующего шаблону, как описано в подразделе Расширение параметра above. Эта опция включена по умолчанию.
- progcomp
- Если установлено, то средства программируемого завершения (смотрите подраздел Программируемое завершение above) включены. Эта опция включена по умолчанию.
- progcomp_alias
- Если задано и включено программируемое завершение, то bash рассматривает название команды, которое не имеет завершений, как возможный псевдоним и пытается расширить псевдоним. Если у него есть псевдоним, то bash пытается программно завершить, используя командное слово, полученное из расширенного псевдонима.
- promptvars
- Если это установлено, то строки запроса после расширения подвергаются расширению параметров, замене команд, арифметическому расширению и удалению кавычек, как описано в разделе ЗАПРОС above. Эта опция включена по умолчанию.
- restricted_shell
- Оболочка устанавливает эту опцию, если она запущена в режиме с ограниченным доступом (смотрите раздел ОБОЛОЧКА С ОГРАНИЧЕННЫМ ДОСТУПОМ below). Это значение не может быть изменено. Оно не сбрасывается при запуске файлов автозагрузки, позволяя файлам автозагрузки определять, имеет ли оболочка ограничения или нет.
- shift_verbose
- Если это установлено, то встроенная команда shift выводит сообщение об ошибке, когда количество сдвигов превышает количество позиционных параметров.
- sourcepath
- Если эта опция задана, то встроенная команда . (source) использует значение PATH для поиска каталога, содержащего файл, указанный в качестве аргумента. По умолчанию эта опция включена.
- varredir_close
- Если это установлено, то оболочка автоматически закрывает файловые дескрипторы, назначенные с использованием синтаксиса перенаправления {varname} (смотрите раздел ПЕРЕНАПРАВЛЕНИЕ above) вместо того, чтобы оставлять их открытыми после завершения команды.
- xpg_echo
- Если задано, то встроенная команда echo по умолчанию расширяет escape-последовательности с обратной косой чертой.
- suspend [-f]
- Приостановить выполнение оболочки до тех пор, пока она не получит сигнал SIGCONT. Вход в оболочку или оболочка без включенного управления заданиями не могут быть приостановлены; опция -f может быть использована для отмены этого действия и принудительной приостановки. Возвращаемый статус равен 0, если только не выполняется вход в оболочку или управление заданиями не включено и не указано -f.
- test expr
- [ expr ]
- Возвращает
значение 0 (true))
или 1 (false) в
зависимости
от
вычисления
условного
выражения
expr. Каждый
оператор и
операнд
должен
быть
отдельным
аргументом.
Выражения
состоят из
основных
компонентов,
описанных
above в разделе
УСЛОВНЫЕ
ВЫРАЖЕНИЯ.
test не
принимает
никаких
опций, а
также не
принимает
и не
игнорирует
аргумент --
как
обозначающий
окончание
опций.
Выражения могут быть объединены с помощью следующих операторов, перечисленных в порядке убывания приоритета. Вычисление зависит от количества аргументов; смотрите ниже. Приоритет оператора используется при наличии пяти или более аргументов.
- ! expr
- Истинно если expr ложно.
- ( expr )
- Возвращает значение expr. Это может использоваться для переопределения обычного приоритета операторов.
- expr1 -a expr2
- Истинно, если оба значения expr1 и expr2 являются истинными.
- expr1 -o expr2
- Истинно, если одно из expr1 или expr2 является истинным.
test и [ вычисляют условные выражения, используя набор правил, основанный на количестве аргументов.
- 0 аргументов
- Выражение ложно.
- 1 argument
- Выражение истинно тогда и только тогда, когда аргумент не равен нулю.
- 2 аргумента
- Если первый аргумент равен !, то выражение истинно тогда и только тогда, когда второй аргумент равен нулю. Если первым аргументом является одним из унарных условных операторов, перечисленных above в разделе УСЛОВНЫЕ ВЫРАЖЕНИЯ, то выражение истинно, если выполняется унарный тест. Если первый аргумент не является допустимым унарным условным оператором, то выражение ложно.
- 3 аргумента
- Следующие условия применяются в указанном порядке. Если вторым аргументом является один из перечисленных бинарных условных операторов above в соответствии с разделом УСЛОВНЫЕ ВЫРАЖЕНИЯ, то результатом выражения является результат двоичного теста с использованием первого и третьего аргументов в качестве операндов. Операторы -a и -o считаются двоичными операторами при наличии трех аргументов. Если первым аргументом является !, то значение является инверсией двух аргументного теста с использованием второго и третьего аргументов. Если первый аргумент в точности равен (, а третий аргумент в точности равен ), то результатом будет проверка второго аргумента с помощью одного аргумента. В противном случае выражение будет ложным.
- 4 аргумента
- Следующие условия применяются в указанном порядке. Если первым аргументом является !, результатом является инверсия выражения с тремя аргументами, составленного из оставшихся аргументов, тест с двумя аргументами с использованием второго и третьего аргументов. Если первый аргумент в точности равен (, а четвертый аргумент в точности равен ), то результатом является проверка второго и третьего аргументов с помощью двух аргументов. В противном случае выражение анализируется и вычисляется в соответствии с приоритетом с использованием правил, перечисленных выше.
- 5 или более аргументов
- Выражение анализируется и вычисляется в соответствии с приоритетом с использованием правил, перечисленных выше.
При использовании с командой test или [ операторы < и > выполняют лексикографическую сортировку с использованием порядка ASCII.
- times
- Вывести суммарное пользовательское и системное время для оболочки и для процессов, запускаемых из оболочки. Возвращаемый статус равен 0.
- trap [-lp] [[arg] sigspec ...]
- Команда arg
должна
быть
прочитана
и
выполнена,
когда
оболочка
получит
сигнал(ы) sigspec.
Если arg
отсутствует
(и есть
только sigspec)
или -, то
каждый
указанный
сигнал
возвращается
к своему
первоначальному
значению
(т.е.
значению,
которое он
имел при
входе в
оболочку).
Если arg
является
нулевой
строкой, то
сигнал,
указанный
каждым sigspec,
игнорируется
оболочкой
и
вызываемыми
ею
командами.
Если arg
отсутствует
и была
указана -p,
то
отображаются
команды
перехвата,
связанные
с каждым sigspec.
Если
аргументы
не указаны
или
указана
только -p,
то команда
trap выводит
список
команд,
связанных
с каждым
сигналом.
Опция -l
заставляет
оболочку
выводить
список
названий
сигналов и
соответствующих
им номеров.
Каждое sigspec
является
либо
названием
сигнала,
определенным
в <signal.h>, либо
номером
сигнала.
Названия
сигналов
не зависят
от
регистра, а
префикс SIG
необязателен.
Если sigspec равно EXIT (0), то команда arg выполняется при выходе из оболочки. Если sigspec равно DEBUG, то команда arg выполняется перед каждой командой simple command, командой for, командой case, командой select, каждой арифметической командой for и перед выполнением первой команды в функции оболочки (смотрите раздел ГРАММАТИКА ОБОЛОЧКИ above). Обратитесь к описанию опции extdebug для встроенной команды shopt для получения подробной информации о ее влиянии на ловушку DEBUG. Если значение sigspec равно RETURN, то команда arg выполняется каждый раз, когда завершается выполнение функции оболочки или скрипта, выполняемого встроенными командами . или source.
Если значение sigspec равно ERR, то команда arg выполняется всякий раз, когда конвейер (который может состоять из одной простой команды), список или составная команда, возвращают ненулевой статус завершения при соблюдении следующих условий. Ошибка ERR не выполняется, если неудачная команда является частью списка команд, следующего непосредственно за ключевым словом while или until, частью теста в команде if, частью команды, выполняемой в && или ||, за исключением команды, следующей за последней && или ||, любой команды в конвейере, кроме последней, или если возвращаемое значение команды инвертируется с помощью !. Это те же условия, которым соответствует опция errexit (-e).
Сигналы, проигнорированные при входе в оболочку, не могут быть перехвачены или сброшены. Перехваченные сигналы, которые не игнорируются, восстанавливаются до их исходных значений в подоболочке или окружающей среде подоболочки, когда она создается. Возвращаемый статус равен false, если какой-либо sigspec является недопустимым; в противном случае trap возвращает true.
- type [-aftpP] name [name ...]
- Если опции отсутствуют, то показать, как будет интерпретироваться каждое name, если оно будет использоваться в качестве названия команды. Если используется опция -t, то type выводит строку, которая является одной из alias, keyword, function, builtin или file, если name является псевдонимом, зарезервированным в оболочке словом, функцией, встроенной командой или файлом на диске, соответственно. Если name не найдено, то ничего не выводится и возвращается статус завершения, равен false. Если используется опция -p, то type либо возвращает название файла на диске, которое было бы выполнено, если бы в качестве названия команды было указано name, либо ничего, если ``type -t name'' не возвращает file. Опция -P заставляет выполнять поиск в PATH для каждого name, даже если ``type -t name'' не вернет file. Если команда хэширована, -p и -P выводят хэшированное значение, которое не обязательно является файлом, который отображается первым в PATH. Если используется опция -a, то type выводит все места, содержащие исполняемый файл с названием name. Это включает псевдонимы и функции, если и только если опция -p также не используется. Таблица хэшированных команд не просматривается при использовании -a. Опция -f подавляет поиск функций, как и при использовании встроенной команды command. Команда type возвращает значение true, если найдены все аргументы и значение false, если ни один из них не найден.
- ulimit [-HS] -a
- ulimit [-HS] [-bcdefiklmnpqrstuvxPRT [limit]]
- Обеспечивает управление ресурсами, доступными оболочке и запускаемым ею процессам, в системах, которые допускают такое управление. Опции -H и -S указывают, что для данного ресурса установлен жесткий или мягкий лимит. Пользователь, не имеющий прав администратора root, не может увеличить жесткий лимит после его установки; мягкий лимит может быть увеличен до значения жесткого лимита. Если не указано ни -H, ни -S, то устанавливаются как мягкие, так и жесткие лимиты. Значением лимит limit может быть число в единицах измерения, указанных для ресурса или одно из специальных значений hard, soft или unlimited, которые обозначают текущий жесткий лимит, текущий мягкий лимит и отсутствие лимитов, соответственно. Если значение limit опущено, то выводится текущее значение лимита ресурса, если только не задана опция -H. Если указано более одного ресурса, то перед значением выводится название лимита и единица измерения, если это уместно. Другие варианты интерпретируются следующим образом:
- -a
- Сообщаются все текущие лимиты; никакие ограничения не установлены
- -b
- Максимальный размер буфера сокета
- -c
- Максимальный размер создаваемых файлов ядром
- -d
- Максимальный размер сегмента данных процесса
- -e
- Максимальный приоритет планирования ("nice" - "хороший")
- -f
- Максимальный размер файлов, записываемых оболочкой и ее дочерними элементами
- -i
- Максимальное количество ожидающих сигналов
- -k
- Максимальное количество очередей kqueues, которое может быть выделено
- -l
- Максимальный размер, который может быть сохранен в памяти
- -m
- Максимальный размер резидентного набора (многие системы не соблюдают это ограничение)
- -n
- Максимальное количество открытых файловых дескрипторов (большинство систем не позволяют устанавливать это значение)
- -p
- Размер канала в 512-байтовых блоках (это может быть не задано)
- -q
- Максимальное количество байт в очередях сообщений POSIX
- -r
- Максимальный приоритет планирования в режиме реального времени
- -s
- Максимальный размер стека
- -t
- Максимальное количество процессорного времени в секундах
- -u
- Максимальное количество процессов, доступных одному пользователю
- -v
- Максимальный размер виртуальной памяти, доступный оболочке и, в некоторых системах, ее дочерним элементам
- -x
- Максимальное количество блокировок файлов
- -P
- Максимальное количество псевдотерминалов
- -R
- Максимальное время, в течение которого процесс реального времени может выполняться до блокировки, в микросекундах
- -T
- Максимальное количество потоков
Если задан лимит limit, а опция -a не используется, то новым значением указанного ресурса будет limit. Если опция не задана, то предполагается значение -f. Значения указаны с шагом в 1024 байта, за исключением -t, который измеряется в секундах; -R, который измеряется в микросекундах; -p, который представлен в виде блоков по 512 байт; -P, -T, -b, -k, -n и -u, которые являются немасштабированными значениями; в режиме posix используются значения -c и -f, которые имеют интервал в 512 байт. Возвращаемый статус равен 0, если только не указана недопустимая опция или аргумент или не произошла ошибка при установке нового лимита.
- umask [-p] [-S] [mode]
- Для пользовательской маски создания файла задано значение mode. Если mode начинается с цифры, то это интерпретируется как восьмеричное число; в противном случае это интерпретируется как символьная маска режима, аналогичная той, которая принята в chmod(1). Если опция mode опущена, то выводится текущее значение маски. Опция -S приводит к тому, что маска выводится в символьном виде; по умолчанию выводится восьмеричное число. Если указана опция -p, а опция mode опущена, то выводится форма, которая может быть повторно использована в качестве входных данных. Возвращаемый статус равен 0, если режим был успешно изменен или если аргумент mode не был указан, и false в противном случае.
- unalias [-a] [name ...]
- Удалить каждый указанный псевдоним name из списка псевдонимов. Если указано значение -a, то все определения псевдонимов будут удалены. Возвращаемое значение равно true, если только указанное name не является существующим псевдонимом.
- unset [-fv] [-n] [name ...]
- Для каждого названия name удалить соответствующую переменную или функцию. Если задана опция -v, и каждое name ссылается на переменную оболочки, то эта переменная удаляется. Переменные, доступные только для чтения, не могут быть отключены. Если указано значение -f, и каждое значение name ссылается на функцию оболочки, то определение функции удаляется. Если указана опция -n, а name является переменной с атрибутом nameref, то значение name будет отменено, а не значение переменной, на которую оно ссылается. -n не действует, если указана опция -f. Если опции не указаны, то каждая опция name ссылается на переменную; если переменной с таким названием нет, то функция с таким названием, если таковая имеется, не задана. Каждая неустановленная переменная или функция удаляется из окружающей среды, передаваемой последующим командам. Если какое-либо из BASH_ALIASES, BASH_ARGV0, BASH_CMDS, BASH_COMMAND, BASH_SUBSHELL, BASHPID, COMP_WORDBREAKS, DIRSTACK, EPOCHREALTIME, EPOCHSECONDS, FUNCNAME, GROUPS, HISTCMD, LINENO, RANDOM, SECONDS или SRANDOM не установлены, то они теряют свои специальные свойства, даже если впоследствии они будут сброшены. Статус выхода равен true, если только name не доступно только для чтения или не может быть сброшено.
- wait [-fn] [-p varname] [id ...]
- Дождаться каждого указанного дочернего процесса и вернуть его статус завершения. Каждый идентификатор id может быть идентификатором процесса или спецификацией задания; если задана спецификация задания, то все процессы в конвейере этого задания находятся в ожидании. Если идентификатор id не задан, то команда wait ожидает выполнения всех запущенных фоновых заданий и замены последнего выполненного процесса, если его идентификатор процесса совпадает с $!, а статус возврата равен нулю. Если указана опция -n, то команда wait ожидает завершения отдельного задания из списка id или, если id не указан, то любого задания и возвращает его статус завершения. Если ни один из предоставленных аргументов не является дочерним по отношению к оболочке или если аргументы не указаны и в оболочке нет не ожидаемых дочерних элементов, то статус завершения равен 127. Если указана опция -p, то идентификатор процесса или задания, для которого возвращается статус завершения, присваивается переменной varname, указанной в аргументе опции. Переменная будет отключена изначально, перед любым назначением. Это полезно только в том случае, если включена опция -n. При включении опции -f, когда включено управление заданиями, wait ожидает завершения id, прежде чем вернуть свой статус, вместо того, чтобы возвратиться при изменении статуса. Если id указывает на несуществующий процесс или задание, то статус возврата равен 127. Если wait прерывается сигналом, статус возврата будет больше 128, как описано в разделе СИГНАЛЫ above. В противном случае статус возврата соответствует статусу завершения последнего ожидаемого процесса или задания.
РЕЖИМ СОВМЕСТИМОСТИ ОБОЛОЧКИ¶
В Bash-4.0 введена концепция уровня совместимости оболочки shell compatibility level, заданная как набор опций для встроенной команды shopt (compat31, compat32, compat40, compat41 и так далее). Существует только один текущий уровень совместимости - каждый вариант уровня совместимости является взаимоисключающим.Уровень совместимости предназначен для того, чтобы позволить пользователям выбирать поведение из предыдущих версий, несовместимое с более новыми версиями, при переносе сценариев для использования текущих функций и поведения. Предполагается, что это временное решение.
В этом разделе не упоминается поведение, которое является стандартным для конкретной версии (например, установка compat32 означает, что в кавычках правая сторона (right-hand side (rhs)) оператора сопоставления регулярных выражений заключаются в специальные символы регулярных выражений в слове, что является поведением по умолчанию в bash-3.2 и последующих версиях).
Если пользователь активирует, скажем, уровень compat32, это может повлиять на поведение других уровней совместимости вплоть до текущего уровня совместимости, включительно. Идея заключается в том, чтобы каждый уровень совместимости управлял поведением, которое изменилось в данной версии bash, но это поведение могло присутствовать и в более ранних версиях. Например, изменение на использование сравнений на основе локалей с помощью команды [[ появилось в bash-4.1, а в более ранних версиях использовались сравнения на основе ASCII, поэтому включение compat32 также позволит проводить сравнения на основе ASCII. Такой степени детализации может быть недостаточно для всех применений и в результате пользователям следует внимательно относиться к уровням совместимости. Ознакомьтесь с документацией по конкретной функциональной возможности, чтобы узнать о текущем поведении оболочки.
В Bash-4.3 появилась новая переменная оболочки: BASH_COMPAT. Значение, присвоенное этой переменной (десятичный номер версии, например, 4.2, или целое число, соответствующее опции compatNN, например, 42), определяет уровень совместимости.
Начиная с версии bash-4.4, в оболочке Bash начали применяться устаревшие уровни совместимости. В конечном итоге эти опции будут удалены в пользу BASH_COMPAT.
Bash-5.0 - это последняя версия оболочки, в которой будет доступна, для команды shopt, отдельная опция для предыдущей версии. Пользователям следует использовать BASH_COMPAT в bash-5.0 и более поздних версиях.
В следующей таблице описаны изменения в поведении, которые зависят от каждого уровня совместимости. Тег compatNN используется в качестве обозначения для установки уровня совместимости равным NN с помощью одного из следующих механизмов. Для версий, предшествующих bash-5.0, уровень совместимости может быть установлен с помощью соответствующей опции compatNN команды shopt. Для bash-4.3 и более поздних версий предпочтительна переменная BASH_COMPAT и она обязательна для версии bash-5.1 и более поздних версий.
- •
- заключение в кавычки правой стороны (right-hand side (rhs)) оператора сопоставления регулярных выражений команды [[ (=~) не имеет специального эффекта
- •
- прерывание списка команд, такого как "a ; b ; c", приводит к выполнению следующей команды в списке (в bash-4.0 и более поздних версиях оболочка действует так, как если бы она получила прерывание, поэтому прерывание одной команды в списке прерывает выполнение всего списка).
- •
- операторы < и > для команды [[ не учитывают текущую локаль при сравнении строк; они используют порядок стандарта ASCII. Версии Bash, предшествующие bash-4.1, используют сортировки ASCII и strcmp(3); в bash-4.1 и более поздних версиях используется последовательность сортировки текущей локали и strcoll(3).
- в режиме posix за time могут следовать опции и они по-прежнему будет распознаваться как зарезервированное слово (это интерпретация POSIX 267).
- в режиме posix синтаксический анализатор требует, чтобы в части word расширение параметра, заключенного в двойные кавычки, было четное количество одинарных кавычек, и обрабатывает их особым образом, чтобы символы внутри одинарных кавычек считались заключенными в кавычки (это интерпретация POSIX 221).
- строка для замены из шаблона в двойных кавычках не подвергается удалению кавычек, как это происходит в версиях после bash-4.2
- в режиме posix одинарные кавычки считаются специальными при расширении части слова word в параметре, заключенным в двойные кавычки, и могут использоваться для заключения в кавычки закрывающей фигурной скобки или другого специального символа (это часть интерпретации POSIX 221); в более поздних версиях одинарные кавычки не являются специальными в двойных кавычках при расширении слов
- оболочка не выводит предупреждающее сообщение, если предпринимается попытка использовать заключенное в кавычки составное присваивание в качестве аргумента в команде declare (например, declare -a foo='(1 2)'). Более поздние версии предупреждают, что такое использование не рекомендуется
- ошибки расширения слова word считаются неустранимыми ошибками, которые приводят к ошибке текущей команды, даже в режиме posix (по умолчанию они являются неустранимыми ошибками, которые приводят к завершению работы оболочки).
- при выполнении функции оболочки состояние цикла (while/until/и т.д.) не сбрасывается, поэтому break или continue в этой функции будут прерывать или продолжать циклы в контексте вызова. В Bash-4.4 и более поздних версиях состояние цикла сбрасывается, чтобы предотвратить это
- оболочка устанавливает значения, используемые BASH_ARGV и BASH_ARGC, чтобы они могли расширяться до позиционных параметров оболочки, даже если расширенный режим отладки не включен
- подоболочка наследует циклы от своего родительского контекста, поэтому break или continue приведет к завершению работы подоболочки. В Bash-5.0 и более поздних версиях состояние цикла сбрасывается, чтобы предотвратить завершение работы
- присвоения переменных, предшествующие встроенным командам, таким как export и readonly, которые устанавливают атрибуты, продолжают влиять на переменные с тем же названием в вызывающей окружающей среде, даже если оболочка не находится в режиме posix
- Оболочка Bash-5.1 изменила способ генерации $RANDOM, чтобы привнести немного больше случайности. Если уровень совместимости оболочки установлен на 50 или ниже, то она возвращается к методу из bash-5.0 и предыдущих версий, поэтому при запуске генератора случайных чисел путем присвоения значения переменной RANDOM будет получена та же последовательность, что и в bash-5.0
- Если хэш-таблица команд пуста, то версии оболочки bash, предшествующие версии bash-5.1, выводили соответствующее информационное сообщение, даже при выводе выходных данных, которые могут быть повторно использованы в качестве входных данных. Оболочка Bash-5.1 подавляет это сообщение, когда указана опция -l.
- •
- Встроенная команда unset обрабатывает попытки отмены индексов массива @ и * по-разному в зависимости от того, является ли массив индексированным или ассоциативным и этим отличается от предыдущих версий.
ОГРАНИЧЕННАЯ ОБОЛОЧКА¶
Если bash запускается с названием rbash или при вызове указывается опция -r, то оболочка становится ограниченной. Оболочка с ограниченным доступом используется для настройки окружающей среды, более контролируемой, чем стандартная оболочка. Она ведет себя аналогично bash, за исключением того, что следующие действия запрещены или не выполняются:
- изменение каталогов с помощью команды cd
- установка или отмена значений SHELL, PATH, HISTFILE, ENV или BASH_ENV
- определение названий команд, содержащих /
- определение названия файла, содержащего / в качестве аргумента встроенной команды .
- определение названия файла, содержащего косую черту, в качестве аргумента встроенной команды history
- определение названия файла, содержащего косую черту, в качестве аргумента опции -p для встроенной команды hash
- импорт определений функций из окружающей среды оболочки при запуске
- синтаксический анализ значения SHELLOPTS из окружающей среды оболочки при запуске
- перенаправление выходных данных >, >|, <>, >&, &> и >> с помощью операторов перенаправления
- использование встроенной команды exec для замены оболочки другой командой
- добавление или удаление встроенных команд с опциями -f и -d для встроенной команды enable
- использование встроенной команды enable для включения отключенных встроенных команд оболочки
- определение опции -p для встроенной команды command
- отключение ограниченного режима с помощью set +r или shopt -u restricted_shell.
Эти ограничения вступают в силу после чтения любых файлов запуска.
When a command that is found to be a shell script is executed (see COMMAND EXECUTION above), rbash отключает все ограничения в оболочке, созданной для выполнения скрипта.
СМОТРИТЕ ТАКЖЕ¶
- Руководство по Bash, Брайан Фокс (Brian Fox) и Чет Рейми (Chet Ramey)
- Библиотека Readline Gnu, Брайан Фокс (Brian Fox) и Чет Рейми (Chet Ramey)
- Библиотека истории Gnu, Брайан Фокс (Brian Fox) и Чет Рейми (Chet Ramey)
- Интерфейс переносимой операционной системы (Portable Operating System Interface - POSIX), часть 2: оболочка и утилиты, IEEE --
- http://pubs.opengroup.org/onlinepubs/9699919799/
- http://tiswww.case.edu/~chet/bash/POSIX -- a description of posix mode
- sh(1), ksh(1), csh(1)
- emacs(1), vi(1)
- readline(3)
ФАЙЛЫ¶
- /bin/bash
- Исполняемый файл bash
- /etc/profile
- Общесистемный файл инициализации, выполняемый для входа в оболочку
- /etc/bash.bashrc
- Общесистемный файл запуска для каждой интерактивной оболочки
- /etc/bash.bash.logout
- При входе в оболочку общесистемный файл, выполняемый при выходе из оболочки, очищается
- ~/.bash_profile
- Файл персональной инициализации, выполняемый для входа в оболочку
- ~/.bashrc
- Отдельный файл запуска для каждой интерактивной оболочки
- ~/.bash_logout
- Отдельный файл очистки оболочки, выполняемый при выходе из оболочки
- ~/.bash_history
- Значение по умолчанию для HISTFILE, файла, в котором bash сохраняет историю команд
- ~/.inputrc
- Отдельный файл инициализации readline
АВТОРЫ¶
Брайан
Фокс (Brian Fox).
Фонд
свободного
программного
обеспечения
bfox@gnu.org
Чет Рейми
(Chet Ramey).
Университет
Case Western Reserve
chet.ramey@case.edu
СООБЩЕНИЯ ОБ ОШИБКАХ¶
Если вы обнаружите ошибку в bash, то просим сообщить нам об этом. Однако, сначала мы просим вас убедиться в том, что это действительно ошибка и что она присутствует в последней версии bash. Последняя версия всегда доступна на сайтах ftp://ftp.gnu.org/pub/gnu/bash/ и http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz.
Когда вы определите, что ошибка действительно существует, тогда используйте команду bashbug, чтобы отправить сообщение об ошибке. Если у вас есть исправление, то мы просим вас также отправить его по электронной почте! Предложения и "философские" сообщения об ошибках можно отправлять по электронной почте на адрес bug-bash@gnu.org или разместить в группе новостей Usenet gnu.bash.bug.
ВСЕ сообщения об ошибках должны содержать:
- Номер версии bash
- Аппаратурные средства и операционную систему
- Компилятор, используемый для компиляции
- Описание поведения при ошибке
- Короткий скрипт или "рецепт", который может исправить ошибку
bashbug автоматически вставляет первые три элемента в шаблон, который она предоставляет для отправки отчета об ошибке.
Комментарии и сообщения об ошибках, касающиеся этой страницы руководства, следует направлять chet.ramey@case.edu.
ОШИБКИ¶
Она слишком большая и слишком медленная.
Существуют некоторые небольшие различия между bash и традиционными версиями sh, в основном это - из-за требований спецификации POSIX.
В некоторых случаях использование псевдонимов приводит к путанице.
Встроенные в оболочку команды и функции не подлежат останову или перезапуску.
Сложные команды и последовательности команд типа "a ; b ; c" обрабатываются некорректно при попытке приостановки процесса. Когда процесс останавливается, тогда оболочка немедленно выполняет следующую команду в последовательности. Достаточно заключить последовательность команд в круглые скобки и поместить их в подоболочку, которая может быть остановлена как единое целое.
Переменные массива могут быть (пока) не экспортированы.
Одновременно может быть активен только один сопроцесс.
ПЕРЕВОД¶
Русский перевод этой страницы руководства разработал(и) Aleksandr Felda <isk8da@gmail.com>
Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.
| 19 сентября 2022 | GNU Bash 5.2 |