.\" -*- coding: UTF-8 -*- .\" .\" MAN PAGE COMMENTS to .\" .\" Chet Ramey .\" Case Western Reserve University .\" chet.ramey@case.edu .\" .\" Last Change: Mon Apr 7 16:59:13 EDT 2025 .\" .\" For bash_builtins, strip all but "SHELL BUILTIN COMMANDS" section .\" For rbash, strip all but "RESTRICTED SHELL" section .\" .\" Both conditionalize text based on the base page being formatted .\" using the zZ and zY registers, respectively .\" .\" Ensure the registers are initialized to avoid groff warnings. .nr zZ +0 .nr zY +0 .\" empty .ds zZ .\" Ensure the macros/strings are initialized to avoid groff warnings. .\" empty .ds zY .if \n(zZ=1 .ig zZ .if \n(zY=1 .ig zY .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH BASH 1 "07 апреля 2025" "GNU Bash 5.3" .ie \n(.g \{\ .ds ' \(aq .ds " \(dq .ds ^ \(ha .ds ~ \(ti .\} .el \{\ .ds ' ' .\" \*" is not usable in macro arguments on AT&T troff (DWB, Solaris 10) .ds " ""\" two adjacent quotes and no space before this comment .ds ^ ^ .ds ~ ~ .\} .\" . .de FN \%\fI\|\\$1\|\fP\\$2 .. .\" File Name macro. This used to be `.PN', for Path Name, .\" but Sun doesn't seem to like that very much. .\" \% at the beginning of the string protects the filename from hyphenation. .\" .de Q .ie \n(.g \(lq\\$1\(rq\\$2 .el \{\ . if t ``\\$1''\\$2 . if n "\\$1"\\$2 .\} .. .\" .\" Quotation macro: generate consistent quoted strings that don't rely .\" on the presence of the `CW' constant-width font. .\" .de QN .ie \n(.g \%\(lq\\$1\(rq\\$2 .el \{\ . if t \%``\\$1''\\$2 . if n \%"\\$1"\\$2 .\} .. .\" Q but disallowing hyphenation of the string .SH НАИМЕНОВАНИЕ bash \- Оболочка GNU Bourne\-Again .SH ОБЗОР \fBbash\fP [options] [command_string | file] .SH "АВТОРСКИЕ ПРАВА" .if n Bash is Copyright (C) 1989-2025 by the Free Software Foundation, Inc. .if t Bash is Copyright \(co 1989-2025 by the Free Software Foundation, Inc. .SH ОПИСАНИЕ \fBBash\fP \- это интерпретатор командного языка, который выполняет команды, считываемые из стандартного ввода, из командной строки или из файла. Это повторная и дополненная реализация оболочки Bourne, исторического интерпретатора командного языка Unix. \fBBash\fP также включает в себя полезные функциональные возможности оболочек \fIKorn\fP и \fIC\fP (\fBksh\fP и \fBcsh\fP). .PP .SM POSIX \- это название семейства компьютерных стандартов, основанных на Unix. \fBBash\fP предназначена для того, чтобы быть соответствующей реализацией части оболочки и утилит спецификации IEEE .SM POSIX (стандарт IEEE 1003.1). Режим \fBBash\fP .SM POSIX (далее именуемый как \fIposix mode\fP) изменяет поведение оболочки, когда ее работа по умолчанию отличается от стандартной, чтобы строго соответствовать стандарту. Смотрите раздел .SM \fBСМОТРИТЕ ТАКЖЕ\fP ниже для получения ссылки на документ, в котором подробно описывается, как режим posix mode влияет на поведение \fBbash\fP. Оболочка \fBBash\fP может быть настроена на соответствие .SM POSIX по умолчанию. .SH ПАРАМЕТРЫ Все односимвольные опции оболочки, описанные в описании встроенной команды \fBset\fP, включая \fB\-o\fP, могут использоваться в качестве опций при вызове оболочки. Кроме того, \fBbash\fP интерпретирует следующие опции при вызове: .PP .TP 10 \fB\-c\fP Если присутствует опция \fB\-c\fP, то команды считываются из первого, не содержащего опции, аргумента командной строки \fIcommand_string\fP. Если после \fIcommand_string\fP есть аргументы, то первому аргументу присваивается значение \fB$0\fP, а значения остальных аргументов присваиваются позиционным параметрам. Присвоение значения \fB$0\fP определяет название оболочки, которое используется в предупреждениях и сообщениях об ошибках. .TP \fB\-i\fP Если присутствует опция \fB\-i\fP, то оболочка является \fIинтерактивной\fP. .TP \fB\-l\fP Эта опция заставляет оболочку \fBbash\fP действовать так, как если бы это был вход в оболочку (смотрите раздел .SM \fBВЫЗОВ\fP ниже). .TP \fB\-r\fP Если присутствует опция \fB\-r\fP, то оболочка становится \fIrestricted\fP,т.е. ограниченной оболочкой (смотрите раздел .SM \fBОГРАНИЧЕННАЯ ОБОЛОЧКА\fP ниже). .TP \fB\-s\fP Если присутствует опция \fB\-s\fP или если после обработки опции не осталось аргументов, то оболочка считывает команды из стандартного ввода. Эта опция позволяет устанавливать позиционные параметры при вызове интерактивной оболочки или при чтении входных данных через конвейер. .TP \fB\-D\fP Выводить список всех строк, заключенных в двойные кавычки, перед которыми в стандартном выводе стоит \fB$\fP. Это строки, которые подлежат переводу на другой язык, если текущая локаль не является \fBC\fP или \fBPOSIX\fP. Это подразумевает опцию \fB\-n\fP; никакие команды выполняться не будут. .TP \fB[\-+]O [\fP\fIshopt_option\fP\fB]\fP Опция \fIshopt_option\fP \- это одна из опций оболочки, используемых встроенной командой \fBshopt\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). Если опция \fIshopt_option\fP определена, то \fB\-O\fP устанавливает значение этой опции; \fB+O\fP отменяет его. Если опция \fIshopt_option\fP не определена, то \fBbash\fP выводит названия и значение опций оболочки, принятых \fBshop\fP, на стандартный вывод. Если опция вывода равна \fB+O\fP, то выходные данные отображаются в формате, который может быть повторно использован в качестве входных данных. .TP \fB\-\-\fP Символ \fB\-\-\fP сигнализирует об окончании выбора опций и отключает дальнейшую обработку опций. Любые аргументы после \fB\-\-\fP рассматриваются как название файла сценария оболочки (см. ниже) и передаются этому сценарию. Аргумент \fB\-\fP эквивалентен \fB\-\-\fP. .PP Оболочка \fBBash\fP также интерпретирует ряд опций, состоящих из нескольких символов. Эти опции должны появиться в командной строке до того, как будут распознаны опции, состоящие из одного символа. .PP .TP \fB\-\-debugger\fP Сделать так, чтобы профиль отладчика был выполнен до запуска оболочки. Включает расширенный режим отладки (смотрите описание опции \fBextdebug\fP для встроенной команды \fBshopt\fP ниже). .TP \fB\-\-dump\-po\-strings\fP Эквивалентно \fB\-D\fP, но выходные данные находятся в формате GNU \fIgettext\fP .Q po (переносимый объект). .TP \fB\-\-dump\-strings\fP Эквивалентно \fB\-D\fP. .TP \fB\-\-help\fP Вывести сообщение об использовании на стандартный вывод и завершить работу. .TP .PD 0 \fB\-\-init\-file\fP \fIfile\fP .TP \fB\-\-rcfile\fP \fIfile\fP .PD Выполнять команды из файла \fIfile\fP вместо стандартного файла персональной инициализации .FN \*~/.bashrc если оболочка является интерактивной (смотрите раздел .SM \fBВЫЗОВ\fP ниже). .TP \fB\-\-login\fP Эквивалентно \fB\-l\fP. .TP \fB\-\-noediting\fP Не использовать библиотеку GNU \fBreadline\fP для чтения командных строк, когда оболочка является интерактивной. .TP \fB\-\-noprofile\fP Также не читать общесистемный файл запуска .FN /etc/profile или любой из личных файлов инициализации .FN \*~/.bash_profile , .FN \*~/.bash_login , или .FN \*~/.profile . По умолчанию \fBbash\fP считывает эти файлы, когда она вызывается для входа в оболочку (смотрите раздел .SM \fBВЫЗОВ\fP ниже). .TP \fB\-\-norc\fP Не читать и не запускать файл персональной инициализации .FN \*~/.bashrc если оболочка является интерактивной. Эта опция включена по умолчанию, если оболочка вызывается как \fBsh\fP. .TP \fB\-\-posix\fP Включить режим posix; изменить поведение \fBbash\fP, в котором операции по умолчанию отличаются от требований стандарта .SM POSIX так, чтобы они соответствовали стандарту. .TP \fB\-\-restricted\fP Оболочка становится ограниченной (смотрите раздел .SM \fBОГРАНИЧЕННАЯ ОБОЛОЧКА\fP ниже). .TP \fB\-\-verbose\fP Эквивалентно \fB\-v\fP. .TP \fB\-\-version\fP Вывести сведения об этой версии оболочки \fBbash\fP на стандартный вывод и завершить работу. .SH АРГУМЕНТЫ Если после обработки опции остаются аргументы, а опция \fB\-c\fP и опция \fB\-s\fP не были указаны, то первый аргумент обрабатывается как название файла, содержащего команды оболочки (\fIshell script\fP). Когда \fBbash\fP вызывается таким образом, то \fB$0\fP присваивается название файла, а позиционным параметрам присваиваются остальные аргументы. \fBBash\fP считывает и выполняет команды из этого файла, а затем завершает работу. Статус завершения \fBBash\fP \- это статус завершения последней команды, выполненной в скрипте. Если команды не выполняются, то статус завершения равен 0. \fBBash\fP сначала пытается открыть файл в текущем каталоге и, если файл не найден, то выполняет поиск скрипта в каталогах, указанных в переменной .SM \fBPATH\fP. .SH ВЫЗОВ Вход в оболочку (\fIlogin shell\fP) это \- тот, у которого первым символом нулевого аргумента является \fB\-\fP или тот, который начинается с опции \fB\-\-login\fP. .PP Интерактивная оболочка \fIinteractive shell\fP \- это оболочка, запускаемая без аргументов опций (если только не указано \fB\-s\fP) и без опции \fB\-c\fP, а стандартный ввод и стандартный вывод ошибок которой подключены к терминалам (как определено \fIisatty\fP(3)) или когда она запускается с опцией \fB\-i\fP. Если оболочка интерактивна, то \fBBash\fP устанавливает .SM \fBPS1\fP, а \fB$\-\fP включает \fBi\fP, и поэтому сценарий оболочки или файл запуска могут проверить это состояние. .PP В следующих разделах описывается, как \fBbash\fP выполняет свои файлы запуска. Если какой\-либо из файлов существует, но не может быть прочитан, то \fBbash\fP сообщает об ошибке. Тильды в названиях файлов расширяются так, как это описано ниже в подразделе \fBРасширение тильды\fP раздела .SM \fBРАСШИРЕНИЕ\fP. .PP Когда \fBbash\fP вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с опцией \fB\-\-login\fP, то она сначала считывает и выполняет команды из файла .FN /etc/profile , если этот файл существует. После прочтения этого файла она выполняет поиск .FN \*~/.bash_profile , .FN \*~/.bash_login , и .FN \*~/.profile , в этом порядке и считывает и выполняет команды из первого существующего и доступного для чтения файла. Для предотвращения такого поведения при запуске оболочки может использоваться опция \fB\-\-noprofile\fP. .PP Когда интерактивная оболочка завершает работу или неинтерактивная оболочка выполняет встроенную команду \fBexit\fP, то \fBbash\fP считывает и выполняет команды из файла .FN \*~/.bash_logout , если он существует. .PP Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, то \fBbash\fP считывает и выполняет команды из файла .FN \*~/.bashrc , если файл существует. Опция \fB\-\-norc\fP запрещает такое поведение. Опция \fB\-\-rcfile\fP \fIfile\fP заставляет \fBbash\fP использовать \fIfile\fP вместо .FN \*~/.bashrc . .PP Когда \fBbash\fP запускается неинтерактивно, например, для запуска сценария оболочки, она ищет переменную .SM \fBBASH_ENV\fP в среде окружения, расширяет ее значение, если она там есть и использует расширенное значение в качестве названия файла для чтения и выполнения. \fBBash\fP ведет себя так, как если бы была выполнена следующая команда: .PP .RS .EX if [ \-n \*"$BASH_ENV\*" ]; then . \*"$BASH_ENV\*"; fi .EE .RE .PP но не использует значение переменной .SM \fBPATH\fP для поиска названия файла. .PP Если \fBbash\fP вызывается с названием \fBsh\fP, то она пытается максимально точно имитировать поведение при запуске предыдущих версий \fBsh\fP, в то же время соответствуя стандарту .SM POSIX . При вызове в качестве интерактивной оболочки входа в систему или неинтерактивной оболочки с опцией \fB\-\-login\fP она сначала пытается считывать и выполнять команды .FN /etc/profile и .FN \*~/.profile , в таком порядке. Опция \fB\-\-noprofile\fP запрещает такое поведение. При вызове в качестве интерактивной оболочки с названием \fBsh\fP, \fBbash\fP ищет переменную .SM \fBENV\fP, расширяет ее значение, если оно определено и использует расширенное значение в качестве названия файла для чтения и выполнения. Поскольку оболочка, вызываемая как \fBsh\fP, не пытается считывать и выполнять команды из каких\-либо других файлов запуска, то опция \fB\-\-rcfile\fP не действует. Неинтерактивная оболочка, вызываемая с названием \fBsh\fP, не пытается считывать какие\-либо другие файлы запуска. .PP При вызове как \fBsh\fP, \fBbash\fP переходит в режим posix после чтения файлов запуска. .PP Когда \fBbash\fP запускается в режиме posix, как в случае с опцией командной строки \fB\-\-posix\fP, тогда она соответствует стандарту .SM POSIX для файлов запуска. В этом режиме интерактивные оболочки расширяют переменную .SM \fBENV\fP, считывают и выполняют команды из файла, название которого является расширенным значением. Другие файлы, при запуске, не считываются. .PP \fBBash\fP пытается определить, когда она запускается со стандартным входом, подключенным к сетевому соединению, например, когда она выполняется устаревшим и редко встречающимся демоном удаленной оболочки, обычно \fIrshd\fP, или демоном защищенной оболочки \fIsshd\fP. Если \fBbash\fP определяет, что она запускается таким образом в неинтерактивном режиме, то она считывает и выполняет команды из файла .FN \*~/.bashrc , если этот файл существует и доступен для чтения. \fBBash\fP не читает этот файл, если вызывается как \fBsh\fP. Опция \fB\-\-norc\fP запрещает такое поведение, а опция \fB\-\-rcfile\fP заставляет \fBbash\fP использовать другой файл вместо .FN \*~/.bashrc , но ни \fIrshd\fP, ни \fIsshd\fP обычно не вызывают оболочку с этими опциями и не позволяют их указывать. .PP Если оболочка запущена с эффективным идентификатором пользователя (группы), который не совпадает с реальным идентификатором пользователя (группы), и опция \fB\-p\fP не указана, то файлы запуска не считываются, функции оболочки не наследуются из окружающей среды, а переменные .SM \fBSHELLOPTS\fP, .SM \fBBASHOPTS\fP, .SM \fBCDPATH\fP и .SM \fBGLOBIGNORE\fP, если они появляются в окружающей среде, игнорируются, также эффективный идентификатор пользователя устанавливается равным реальному идентификатору пользователя. Если при вызове указана опция \fB\-p\fP, то поведение при запуске будет таким же, но эффективный идентификатор пользователя не будет сброшен. .SH ОПРЕДЕЛЕНИЯ В остальной части этого документа используются следующие определения. .PD 0 .TP \fBblank\fP Пробел или символ табуляции. .TP \fBwhitespace\fP Символ, принадлежащий классу символов пробел \fBspace\fP в текущей локали или для которого \fIisspace\fP(3) возвращает значение true. .TP \fBword\fP Последовательность символов, рассматриваемая оболочкой как единое целое. Также известная как токен \fBtoken\fP. .TP \fBname\fP Слово \fIword\fP, состоящее только из буквенно\-цифровых символов и знаков подчеркивания и начинающееся с буквенного символа или знака подчеркивания. Также именуемое как идентификатор \fBidentifier\fP. .TP \fBmetacharacter\fP Метасимвол \fBmetacharacter\fP \- символ, который, если он не заключен в кавычки, разделяет слова. Это может быть один из следующих символов: .br .RS .PP .if t \fB| & ; ( ) < > space tab newline\fP .if n \fB| & ; ( ) < > space tab newline\fP .RE .TP Оператор управления \fBcontrol operator\fP Токен \fItoken\fP, выполняющий функцию управления. Это один из следующих символов: .RS .PP .if t \fB|| & && ; ;; ;& ;;& ( ) | |& \fP .if n \fB|| & && ; ;; ;& ;;& ( ) | |& \fP .RE .PD .SH "ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА" Зарезервированные слова \fIReserved words\fP \- это слова, которые имеют специальное значение для оболочки. Следующие слова распознаются как зарезервированные, если они не заключены в кавычки и являются либо первым словом команды (смотрите ниже раздел .SM \fBГРАММАТИКА ОБОЛОЧКИ\fP), либо третьим словом команды \fBcase\fP или \fBselect\fP (допустимо только \fBin\fP), либо третьим словом словом команды \fBfor\fP (допустимы только \fBin\fP и \fBdo\fP): .if t .RS .PP .B .if n ! case coproc do done elif else esac fi for function if in select \ then until while { } time [[ ]] .if t ! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]] .if t .RE .SH "ГРАММАТИКА ОБОЛОЧКИ" В этом разделе описывается синтаксис различных форматов команд оболочки. .SS "Simple Commands" Простая команда \fIsimple command\fP \- это последовательность необязательных переменных, за которыми следуют слова (разделенные пробелом \fBblank\fP) и перенаправления, которые завершаются управляющим оператором \fIcontrol operator\fP. Первое слово определяет команду, которая должна быть выполнена. Это слово передается в качестве нулевого аргумента. Остальные слова передаются в качестве аргументов вызываемой команды. .PP Возвращаемое значение простой команды \fIsimple command\fP \- это статус её завершения или 128+\fIn\^\fP, если команда завершается по сигналу \fIn\fP. .SS Pipelines Конвейер (канал) \fIpipeline\fP представляет собой последовательность из одной или нескольких команд, разделенных одним из управляющих операторов \fB|\fP или \fB|&\fP. Формат конвейера следующий: .RS .PP [\fBtime\fP [\fB\-p\fP]] [ ! ] \fIcommand1\fP [ [\fB|\fP\(bv\fB|&\fP] \fIcommand2\fP .\|.\|.\& ] .RE .PP Стандартный вывод команды \fIcommand1\fP подключен через канал к стандартному вводу команды \fIcommand2\fP. Это подключение выполняется перед любыми перенаправлениями, указанными в \fIcommand1\fP(смотрите раздел .SM \fBПЕРЕНАПРАВЛЕНИЕ\fP ниже). Если \fB|&\fP является оператором конвейера, то стандартная ошибка команд \fIcommand1\fP, в дополнение к ее стандартному выходу, связана со стандартным входом команд \fIcommand2\fP через конвейер. Это сокращение от \fB2>&1 |\fP. Это неявное перенаправление стандартной ошибки на стандартный выход выполняется после любых перенаправлений, указанных в \fIcommand1\fP. .PP Возвращаемый статус конвейера \- это статус завершения последней команды, если только не включена опция \fBpipefail\fP. Если опция \fBpipefail\fP включена, то статус возврата конвейера равен значению последней (самой правой) команды, которая завершается с ненулевым статусом или нулю, если все команды завершаются успешно. Если зарезервированное слово \fB!\fP предшествует конвейеру, то статус завершения этого конвейера является логическим отрицанием статуса завершения, как описано выше. Если конвейер выполняется синхронно, то оболочка ожидает завершения всех команд в конвейере, прежде чем возвратить значение. .PP Если зарезервированное слово \fBtime\fP предшествует конвейеру, то оболочка сообщает о прошедшем времени, а также о пользовательском и системном времени, затраченном на его выполнение, когда конвейер завершается. Опция \fB\-p\fP изменяет формат вывода на указанное .SM POSIX \&. Когда оболочка находится в режиме posix, то она не распознает \fBtime\fP как зарезервированное слово, если следующий токен начинается с .Q \- . Значение переменной .SM \fBTIMEFORMAT\fP представляет собой строку формата, которая определяет, как должна отображаться информация о времени. Смотрите описание переменной .SM \fBTIMEFORMAT\fP ниже в подразделе \fBПеременные оболочки\fP. .PP Когда оболочка находится в режиме posix, \fBtime\fP может отображаться само по себе как единственное слово в простой команде. В этом случае оболочка отображает общее пользовательское и системное время, затраченное оболочкой и ее дочерними элементами. Переменная .SM \fBTIMEFORMAT\fP определяет формат информации о времени. .PP Каждая команда в конвейере с несколькими командами, где создаются конвейеры, выполняется в подоболочке \fIsubshell\fP, которая является отдельным процессом. Описание подоболочек и среды подоболочек приведено в разделе .SM \fBСРЕДА ВЫПОЛНЕНИЯ КОМАНД\fP. Если опция \fBlastpipe\fP включена с помощью встроенной команды \fBshopt\fP (смотрите описание \fBshopt\fP ниже), а управление заданиями не активировано, то последний элемент конвейера может быть запущен процессом оболочки. .SS Списки Список \fIlist\fP \- это последовательность из одного или нескольких конвейеров, разделенных одним из операторов \fB;\fP, \fB&\fP, \fB&&\fP или \fB||\fP и необязательно завершающихся одним из \fB;\fP, \fB&\fP или \fB\fP. .PP В этом списке операторы \fB&&\fP и \fB||\fP имеют одинаковый приоритет, а за ними следуют операторы \fB;\fP и \fB&\fP, которые также имеют одинаковый приоритет. .PP Вместо точки с запятой для разделения команд в списке \fIlist\fP может присутствовать последовательность из одной или нескольких новых строк. .PP Если команда завершается управляющим оператором \fB&\fP, то оболочка выполняет команду в фоновом режиме \fIbackground\fP в подоболочке. Оболочка не ожидает завершения команды и возвращаемый статус равен 0. Они называются асинхронными \fIasynchronous\fP командами. Команды, разделенные символом \fB;\fP, выполняются последовательно; оболочка ожидает завершения выполнения каждой команды по очереди. Статус возврата \- это статус завершения последней выполненной команды. .PP Списки И и ИЛИ представляют собой последовательности из одного или нескольких конвейеров, разделенных управляющими операторами \fB&&\fP и \fB||\fP, соответственно. Списки И и ИЛИ выполняются с левой ассоциативностью. Список И имеет вид .RS .PP \fIcommand1\fP \fB&&\fP \fIcommand2\fP .RE .PP \fIcommand2\fP выполняется тогда и только тогда, когда \fIcommand1\fP возвращает нулевой статус завершения (успех). .PP Список ИЛИ имеет вид .RS .PP \fIcommand1\fP \fB||\fP \fIcommand2\fP .RE .PP Команда \fIcommand2\fP выполняется тогда и только тогда, когда команда \fIcommand1\fP возвращает ненулевой статус завершения. Возвращаемый статус списков И и ИЛИ \- это статус завершения последней команды, выполненной в списке. .SS "Compound Commands" Составная команда \fIcompound command\fP \- это одна из следующих команд. В большинстве случаев список \fIlist\fP в описании команды может быть отделен от остальной части команды одной или несколькими символами новой строки, за которыми может следовать новая строка вместо точки с запятой. .TP (\fIlist\fP) Список \fIlist\fP выполняется в подоболочке (описание окружающей среды подоболочки приведено в разделе .SM \fBСРЕДА ВЫПОЛНЕНИЯ КОМАНД\fP ниже). Назначение переменных и встроенные команды, влияющие на окружающую среду команды, перестают действовать после завершения выполнения команды. Статус возврата \- это статус выхода из списка \fIlist\fP. .TP { \fIlist\fP; } Список \fIlist\fP выполняется в текущей среде командной строки. \fIlist\fP должен завершаться новой строкой или точкой с запятой. Это называется групповая команда \fIgroup command\fP. Статус возврата \- это статус завершения списка \fIlist\fP. .IP Обратите внимание, что в отличие от метасимволов \fB(\fP и \fB)\fP, метасимволы \fB{\fP и \fB}\fP являются зарезервированными словами \fIreserved words\fP и должны встречаться там, где разрешено распознавание зарезервированных слов. Поскольку они не приводят к разрыву слов, то они должны быть отделены от списка \fIlist\fPпробелом или другим метасимволом оболочки. .TP ((\fIexpression\fP)) Арифметическое выражение \fIexpression\fP вычисляется в соответствии с правилами, описанными ниже в разделе .SM \fBАРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ\fP. Если значение выражения не равно нулю, то статус возврата равен 0; в противном случае статус возврата равен 1. Выражение \fIexpression\fP расширяется так же, как если бы оно было заключено в двойные кавычки, но неэкранированные символы двойных кавычек в \fIexpression\fP не обрабатываются специальным образом и удаляются. Поскольку это потенциально может привести к появлению пустых строк, эта команда обрабатывает их как выражения, значение которых равно 0. .TP \fB[[\fP \fIexpression\fP \fB]]\fP .PD Вычислить условное выражение \fIexpression\fP и вернуть нулевой (true) или ненулевой (false) статус. Выражения состоят из основных элементов, описанных ниже в разделе .SM \fBУСЛОВНЫЕ ВЫРАЖЕНИЯ\fP. Слова между \fB[[\fP и \fB]]\fP не разделяются на слова и не расширяются названием пути. Оболочка выполняет расширение тильдой, расширение параметров и переменных, арифметическое расширение, замену команд, замену процессов и удаление кавычек в этих словах. Условные операторы, такие как \fB\-f\fP, должны быть без кавычек, чтобы их можно было распознать как основные. .IP При использовании совместно с \fB[[\fP операторы \fB<\fP и \fB>\fP выполняют лексикографическую сортировку с использованием текущей локали. .IP Когда используются операторы \fB==\fP и \fB!=\fP, строка справа от оператора считается шаблоном и сопоставляется в соответствии с правилами, описанными ниже в подразделе \fBСопоставление с шаблоном\fP, как если бы была включена опция оболочки \fBextglob\fP. Оператор \fB=\fP эквивалентен \fB==\fP. Если включена опция оболочки \fBnocasematch\fP, то сопоставление выполняется без учета регистра буквенных символов. Возвращаемое значение равно 0, если строка соответствует (\fB==\fP) или не соответствует (\fB!=\fP) шаблону, и 1 в противном случае. Если какая\-либо часть шаблона заключена в кавычки, заключенная в кавычки часть сопоставляется как строка: каждый символ в заключенной в кавычки части соответствует сам себе, вместо того чтобы иметь какое\-либо специальное значение для сопоставления с шаблоном. .IP Доступен дополнительный двоичный оператор \fB=\*~\fP, имеющий тот же приоритет, что и \fB==\fP и \fB!=\fP. При его использовании строка справа от оператора считается .SM POSIX расширением регулярного выражения и соответствующим образом согласованным (используя интерфейсы .SM POSIX \fIregcomp\fP и \fIregexec\fP, обычно описываемым в \fIregex\fP(3)). Возвращаемое значение равно 0, если строка соответствует шаблону, и 1 в противном случае. Если регулярное выражение синтаксически некорректно, возвращаемое значение условного выражения равно 2. Если включена опция оболочки \fBnocasematch\fP, сопоставление выполняется без учета регистра буквенных символов. .IP Если какая\-либо часть шаблона заключена в кавычки, то часть, заключенная в кавычки, сопоставляется буквально, как указано выше. Если шаблон хранится в переменной оболочки, то при расширении переменной, заключенной в кавычки, весь шаблон должен быть сопоставлен буквально. Внимательно относитесь к выражениям в квадратных скобках в регулярных выражениях, поскольку обычные кавычки и шаблонные символы теряют свое значение между квадратными скобками. .IP Совпадение завершается успешно, если шаблон соответствует какой\-либо части строки. Закрепите шаблон с помощью операторов регулярных выражений \fB\*^\fP и \fB$\fP, чтобы заставить его соответствовать всей строке. .IP Переменная массива .SM \fBBASH_REMATCH\fP записывает, какие части строки соответствуют шаблону. Элемент .SM \fBBASH_REMATCH\fP с индексом 0 содержит часть строки, соответствующую всему регулярному выражению. Подстроки, соответствующие вложенным в скобки выражениям в регулярном выражении, сохраняются в остальных индексах .SM \fBBASH_REMATCH\fP. Элемент .SM \fBBASH_REMATCH\fP с индексом \fIn\fP \- это часть строки, соответствующая \fIn\fP\-му подвыражению, заключенному в круглые скобки. \fBBash\fP устанавливает значение .SM \fBBASH_REMATCH\fP в глобальной области видимости; объявление его как локальной переменной приведет к неожиданным результатам. .IP Выражения могут быть объединены с помощью следующих операторов, перечисленных в порядке убывания приоритета: .IP .RS .PD 0 .TP \fB( \fP\fIexpression\fP\fB )\fP Возвращает значение \fIexpression\fP. Это может использоваться для переопределения обычного приоритета операторов. .TP \fB! \fP\fIexpression\fP Истинно если \fIexpression\fP ложно. .TP \fIexpression1\fP \fB&&\fP \fIexpression2\fP Истинно, если оба \fIexpression1\fP и \fIexpression2\fP истинно. .TP \fIexpression1\fP \fB||\fP \fIexpression2\fP Истинно, если или \fIexpression1\fP или \fIexpression2\fP истинно. .PD .LP Операторы \fB&&\fP и \fB||\fP не вычисляют значение \fIexpression2\fP, если значение \fIexpression1\fP достаточно для определения возвращаемого значения всего условного выражения. .RE .TP \fBfor\fP \fIname\fP [ [ \fBin\fP \fIword .\|.\|.\&\fP ] ; ] \fBdo\fP \fIlist\fP ; \fBdone\fP Сначала расширяется список слов, следующих за \fBin\fP, генерируя список элементов. Затем переменная \fIname\fP присваивается каждому элементу этого списка по очереди, и \fIlist\fP выполняется каждый раз. Если \fBin\fP \fIword\fP опущены, то команда \fBfor\fP выполняет \fIlist\fP один раз для каждого установленного позиционного параметра (смотрите раздел .SM \fBПАРАМЕТРЫ\fP ниже). Статус возврата \- это статус завершения последней выполненной команды. Если при расширении списка элементов, следующих за \fBin\fP, список (list) пуст, то команды не выполняются, и статус возврата равен 0. .TP \fBfor\fP (( \fIexpr1\fP ; \fIexpr2\fP ; \fIexpr3\fP )) [;] \fBdo\fP \fIlist\fP ; \fBdone\fP Сначала вычислить арифметическое выражение \fIexpr1\fP в соответствии с правилами, описанными ниже в разделе .SM \fBАРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ\fP. Затем повторно вычислить арифметическое выражение \fIexpr2\fP, пока оно не станет равным нулю. Каждый раз, когда значение \fIexpr2\fP принимает ненулевое значение, выполнить \fIlist\fP и вычислить арифметическое выражение \fIexpr3\fP. Если какое\-либо выражение опущено, то оно ведет себя так, как будто его значение равно 1. Возвращаемое значение \- это статус завершения последней выполненной команды в списке \fIlist\fP или ненулевое значение, если какое\-либо из выражений является недопустимым. .IP Использовать встроенные команды \fBbreak\fP и \fBcontinue\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже) для управления выполнением цикла. .TP \fBselect\fP \fIname\fP [ \fBin\fP \fIword\fP ] ; \fBdo\fP \fIlist\fP ; \fBdone\fP Сначала раскрыть список слов, следующих за \fBin\fP, создав список элементов, и вывести набор развернутых слов в стандартную ошибку, при этом каждому из набора предшествует номер. Если \fBin\fP \fIword\fP пропущено, то вывести позиционные параметры (смотрите раздел .SM \fBПАРАМЕТРЫ\fP ниже). Затем \fBselect\fP отобразит запрос .SM \fBPS3\fP и считает строку из стандартного ввода. Если строка содержит число, соответствующее одному из отображаемых слов, то \fBselect\fP устанавливает значение \fIname\fP для этого слова. Если строка пуста, то \fBselect\fP снова отображает слова и запрашивает запрос. Если EOF считан, то \fBselect\fP завершает работу и возвращает значение 1. Для любого другого значения \fIname\fP устанавливается значение нольl. Прочитанная строка сохраняется в переменной .SM \fBREPLY\fP. Команда \fIlist\fP выполняется после каждого выбора, пока не будет выполнена команда \fBbreak\fP. Статус завершения команды \fBselect\fP \- это статус завершения последней команды, выполненной в \fIlist\fP, или нулевой, если команды не были выполнены. .TP \fBcase\fP \fIword\fP \fBin\fP [ [(] \fIpattern\fP [ \fB|\fP \fIpattern\fP ] .\|.\|.\& ) \fIlist\fP ;; ] .\|.\|.\& \fBesac\fP Команда \fBcase\fP сначала разворачивает слово \fIword\fP и пытается сопоставить его с каждым шаблоном \fIpattern\fP по очереди, начиная с первого к последнему, используя правила сопоставления, описанные в подразделе \fBСопоставление с шаблоном\fP ниже. Список шаблонов \- это набор из одного или нескольких шаблонов, разделенных символами \|, а оператор ) завершает список шаблонов. Слово \fIword\fP расширяется с помощью тильды, параметров и переменных, арифметического расширения, подстановки команд, подстановки процессов и удаления кавычек. Каждый шаблон \fIpattern\fP расширяется с помощью тильды, параметров и переменных, арифметического расширения, подстановки команд, подстановки процессов и удаления кавычек. Если включена опция оболочки \fBnocasematch\fP, то сопоставление выполняется без учета регистра буквенных символов. Предложение \fIclause\fP \- это список шаблонов и связанный с ним список \fIlist\fP. .IP Когда найдено совпадение, команда \fBcase\fP выполняет соответствующую команду из списка \fIlist\fP. Если оператор \fB;;\fP завершает предложение case, то команда \fBcase\fP завершается после первого совпадения. Использование \fB;&\fP вместо \fB;;\fP приводит к продолжению выполнения \fIlist\fP, связанного списком шаблонов. Использование \fB;;&\fP вместо \fB;;\fP приводит к тому, что оболочка проверяет следующий список шаблонов, если таковой имеется, и выполняет любой связанный с \fIlist\fP, если совпадение завершается успешно, продолжая выполнение команды case, как если бы список шаблонов не совпадал. Статус выхода равен нулю, если ни один шаблон не совпадает. .IP В противном случае это статус завершения последней команды, выполненной в последнем списке \fIlist\fP. .TP \fBif\fP \fIlist\fP; \fBthen\fP \fIlist\fP; [ \fBelif\fP \fIlist\fP; \fBthen\fP \fIlist\fP; ] .\|.\|.\& [ \fBelse\fP \fIlist\fP; ] \fBfi\fP Выполняется \fBif\fP \fIlist\fP. Если ее статус завершения равен нулю, то выполняется \fBthen\fP \fIlist\fP. В противном случае каждый \fBelif\fP \fIlist\fP выполняется по очереди, и если его статус завершения равен нулю, то выполняется \fBthen\fP \fIlist\fP и команда завершается. В противном случае выполняется \fBelse\fP \fIlist\fP, если это присутствует. Статус завершения \- это статус завершения последней выполненной команды или ноль, если ни одно из условий не является истинным. .TP \fBwhile\fP \fIlist\-1\fP; \fBdo\fP \fIlist\-2\fP; \fBdone\fP .PD 0 .TP \fBuntil\fP \fIlist\-1\fP; \fBdo\fP \fIlist\-2\fP; \fBdone\fP .PD Команда \fBwhile\fP непрерывно выполняет список \fIlist\-2\fP до тех пор, пока последняя команда в списке \fIlist\-1\fP не вернет нулевой статус завершения. Команда \fBuntil\fP идентична команде \fBwhile\fP, за исключением того, что проверка отменяется: \fIlist\-2\fP выполняется до тех пор, пока последняя команда в \fIlist\-1\fP не вернет ненулевой статус завершения. Статус завершения команд \fBwhile\fP и \fBuntil\fP \- это статус завершения последней команды, выполненной в \fIlist\-2\fP, или ноль, если ни одна из них не была выполнена. .SS Coprocesses Сопроцесс \fIcoprocess\fP \- это команда оболочки, перед которой стоит зарезервированное слово \fBcoproc\fP. Сопроцесс выполняется асинхронно в подоболочке, как если бы команда была завершена с помощью управляющего оператора \fB&\fP, при этом между исполняющей оболочкой и сопроцессом устанавливается двусторонняя связь. .PP Синтаксис для сопроцесса следующий: .RS .PP \fBcoproc\fP [\fINAME\fP] \fIcommand\fP [\fIredirections\fP] .RE .PP При этом создается сопроцесс с названием \fINAME\fP. Команда \fIcommand\fP может быть как простой, так и составной командой (смотрите выше). \fINAME\fP \- это наименование переменной оболочки. Если \fINAME\fP не указано, то по умолчанию используется наименование \fBCOPROC\fP. .PP Рекомендуемая форма для использования в сопроцессе \- это .RS .PP \fBcoproc\fP \fINAME\fP { \fIcommand\fP [\fIredirections\fP]; } .RE .PP Эта форма предпочтительнее, поскольку простые команды приводят к тому, что сопроцесс всегда называется \fBCOPROC\fP, и она проще в использовании и более полная, чем другие составные команды. .PP Если \fIcommand\fP является составной командой, то \fINAME\fP является необязательным. Слово, следующее за \fBcoproc\fP, определяет, интерпретируется ли это слово как название переменной: оно интерпретируется как \fINAME\fP, если это не зарезервированное слово, которое вводит составную команду. Если \fIcommand\fP является простой командой, то \fINAME\fP не допускается; это делается для того, чтобы избежать путаницы между \fINAME\fP и первым словом простой команды. .PP Когда выполняется сопроцесс, оболочка создает переменную массива (смотрите подраздел \fBМассивы\fP ниже) с названием \fINAME\fP в контексте исполняющей оболочкой. Стандартный вывод \fIcommand\fP подключается по конвейеру к файловому дескриптору в исполняющей оболочке, и этому файловому дескриптору присваивается значение \fINAME\fP[0]. Стандартный ввод \fIcommand\fP подключается по конвейеру к файловому дескриптору в исполняющей оболочке, и этот файловый дескриптор присваивается \fINAME\fP[1]. Этот конвейер устанавливается перед любыми перенаправлениями, указанными командой (смотрите раздел .SM \fBПЕРЕНАПРАВЛЕНИЕ\fP ниже). Файловые дескрипторы могут использоваться в качестве аргументов для команд оболочки и перенаправлений с использованием стандартных расширений слов. Файловые дескрипторы, кроме тех, которые созданы для выполнения команд и обработки подстановок, недоступны в подоболочках. .PP Идентификатор процесса оболочки ID, созданный для выполнения сопроцесса, доступен в виде значения переменной \fINAME\fP_PID. Встроенная команда \fBwait\fP может использоваться для ожидания завершения сопроцесса. .PP Поскольку сопроцесс создается как асинхронная команда, то команда \fBcoproc\fP всегда возвращает результат успешно. Возвращаемый статус сопроцесса \- это статус завершения \fIcommand\fP. .SS "Определения функций оболочки" Функция оболочки \- это объект, который вызывается как простая команда и выполняет сложную команду с новым набором позиционных параметров. Функции оболочки объявляются следующим образом: .TP \fIfname\fP () \fIcompound\-command\fP [\fIredirection\fP] .PD 0 .TP \fBfunction\fP \fIfname\fP [()] \fIcompound\-command\fP [\fIredirection\fP] .PD Это определяет функцию с названием \fIfname\fP. Зарезервированное слово \fBfunction\fP необязательно. Если указано зарезервированное слово \fBfunction\fP, то скобки необязательны. Тело функции \fIbody\fP \- это составная команда \fIcompound\-command\fP (смотрите подраздел \fBСоставные команды\fP выше). Эта команда обычно представляет собой список команд \fIlist\fP между { и }, но может быть любой командой, указанной в подразделе \fBСоставные команды\fP выше. Если используется зарезервированное слово \fBfunction\fP, но скобки не указаны, то рекомендуется использовать фигурные скобки. Составная команда \fIcompound\-command\fP выполняется всякий раз, когда \fIfname\fP указано в качестве названия простой команды. В режиме posix \fIname\fP должно быть допустимым названием для оболочки и не может быть названием одного из .SM POSIX \fIspecial builtins\fP. В режиме по умолчанию названием функции может быть любое слово без кавычек, которое не содержит \fB$\fP. .PP Любые перенаправления (смотрите раздел .SM \fBПЕРЕНАПРАВЛЕНИЕ\fP ниже), указанные при определении функции, выполняются при ее выполнении. .PP Статус завершения определения функции равен нулю, если только не возникает синтаксическая ошибка или функция с таким же названием, доступная только для чтения, уже не существует. При выполнении статус завершения функции равен статусу завершения последней команды, выполненной в её еле (смотрите раздел .SM \fBФУНКЦИИ\fP ниже). .SH КОММЕНТАРИИ В неинтерактивной оболочке или в интерактивной оболочке, в которой включена опция \fBinteractive_comments\fP для встроенной команды \fBshopt\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже), слово, начинающееся с \fB#\fP, содержит комментарий. Слово начинается в начале строки, после пробела без кавычек или после оператора. Комментарий приводит к тому, что это слово и все остальные символы в этой строке игнорируются. Интерактивная оболочка без включенной опции \fBinteractive_comments\fP не допускает комментариев. Опция \fBinteractive_comments\fP включена по умолчанию в интерактивных оболочках. .SH КАВЫЧКИ Кавычки \fIQuoting\fP используется для удаления специального значения определенных символов или слов из командной строки. Кавычки могут использоваться для отключения специальной обработки специальных символов, для предотвращения распознавания зарезервированных слов как таковых и для предотвращения расширения параметров. .PP Каждый из метасимволов \fImetacharacters\fP, перечисленных выше в разделе .SM \fBОПРЕДЕЛЕНИЯ\fP, имеет особое значение для оболочки и должен быть заключен в кавычки, если он должен только представлять сам себя. .PP Когда используются средства расширения истории команд (смотрите раздел .SM \fBРАСШИРЕНИЕ ИСТОРИИ\fP ниже), тогда символ, (обычно \fB!\fP) для предотвращения расширения истории \fIhistory expansion\fP, должен быть заключен в кавычки. .PP Существует четыре механизма кавычек: символы escape \fIescape character\fP, одинарные кавычки, двойные кавычки и одинарные кавычки в знаках доллара. .PP Обратная косая черта без кавычек (\fB\e\fP) \- это \fIescape character\fP \- экранирующий символ. Он сохраняет буквальное значение следующего за ним символа, удаляя любое его специальное значение, за исключением . Если появляется пара \fB\e\fP, а обратная косая черта сама по себе не заключена в кавычки, то \fB\e\fP рассматривается как продолжение строки (то есть удаляется из входного потока и фактически игнорируется). .PP При заключении символов в одинарные кавычки сохраняется буквальное значение каждого символа внутри кавычек. Одинарная кавычка может не заключаться в одинарные кавычки, даже если перед ней стоит обратная косая черта. .PP При заключении символов в двойные кавычки сохраняется буквальное значение всех символов в кавычках, за исключением \fB$\fP, \fB\`\fP, \fB\e\fP и, если включено расширение истории, \fB!\fP. Когда оболочка находится в режиме posix, символ \fB!\fP не имеет особого значения в двойных кавычках, даже если включено расширение истории. Символы \fB$\fP и \fB\`\fP сохраняют свое особое значение в двойных кавычках. Обратная косая черта сохраняет свое особое значение только в том случае, если за ней следует один из следующих символов: \fB$\fP, \fB\`\fP, \^\fB\*"\fP\^, \fB\e\fP или \fB\fP. Обратные косые черты, предшествующие символам без специального значения, остаются без изменений. .PP Двойная кавычка может быть заключена в двойные кавычки, если перед ней поставить обратную косую черту. Если эта опция включена, то будет выполнено расширение истории, если только \fB!\fP, заключенный в двойные кавычки, не будет экранирован с помощью обратной косой черты. Обратная косая черта, предшествующая \fB!\fP, не удаляется. .PP Специальные параметры \fB*\fP и \fB@\fP имеют специальное значение, когда они заключены в двойные кавычки (смотрите раздел .SM \fBПАРАМЕТРЫ\fP ниже). .PP Последовательности символов вида \fB$\fP\*'\fIstring\fP\*' рассматриваются как особый вариант одинарных кавычек. Последовательность расширяется до \fIstring\fP, при этом символы, экранированные обратной косой чертой, в \fIstring\fP заменяются в соответствии со стандартом ANSI C. Управляющие последовательности с обратной косой чертой, если они присутствуют, декодируются следующим образом: .RS .PD 0 .TP \fB\ea\fP сигнал тревоги (сирена) .TP \fB\eb\fP возврат на один символ .TP \fB\ee\fP .TP \fB\eE\fP экранирующий символ .TP \fB\ef\fP новая страница .TP \fB\en\fP новая строка .TP \fB\er\fP возврат каретки .TP \fB\et\fP горизонтальная табуляция .TP \fB\ev\fP вертикальная табуляция .TP \fB\e\e\fP обратная косая черта .TP \fB\e\*'\fP одиночная кавычка .TP \fB\e\*"\fP двойная кавычка .TP \fB\e?\fP вопросительный знак .TP \fB\e\fP\fInnn\fP Восьмибитный символ, значением которого является восьмеричное значение \fInnn\fP (от одной до трех восьмеричных цифр). .TP \fB\ex\fP\fIHH\fP Восьмибитный символ, значением которого является шестнадцатеричное значение \fIHH\fP (одна или две шестнадцатеричные цифры). .TP \fB\eu\fP\fIHHHH\fP Символ в кодировке Unicode (ISO/IEC 10646), значением которого является шестнадцатеричное значение \fIHHHH\fP (от одной до четырех шестнадцатеричных цифр). .TP \fB\eU\fP\fIHHHHHHHH\fP Символ в кодировке Unicode (ISO/IEC 10646), значением которого является шестнадцатеричное значение \fIHHHHHHHH\fP (от одной до восьми шестнадцатеричных цифр). .TP \fB\ec\fP\fIx\fP Управляющий символ\-\fIx\fP. .PD .RE .LP Расширенный результат заключен в одинарные кавычки, как если бы знак доллара отсутствовал. .SS "Перевод строк" Строка, заключенная в двойные кавычки, перед которой стоит знак доллара (\fB$\fP\*"\fIstring\fP\*"), переводится в соответствии с текущей локалью. Инфраструктура \fIgettext\fP выполняет поиск и преобразование, используя переменные оболочки \fBLC_MESSAGES\fP, \fBTEXTDOMAINDIR\fP и \fBTEXTDOMAIN\fP. Если текущей локалью является \fBC\fP или \fBPOSIX\fP, и если перевод недоступен или если строка не переведена, то знак доллара игнорируется, а строка обрабатывается как заключенная в двойные кавычки, как описано выше. Это форма двойных кавычек, поэтому строка по умолчанию остается заключенной в двойные кавычки независимо от того, переведена она и заменена или нет. Если опция \fBnoexpand_translation\fP включена с помощью встроенной функции \fBshopt\fP, то переведенные строки заключаются в одинарные, а не в двойные кавычки. Смотрите описание команды \fBshopt\fP ниже в разделе .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP. .SH ПАРАМЕТРЫ Параметр \fIparameter\fP \- это объект, в котором хранятся значения. Это может быть название \fIname\fP, число или один из специальных символов, перечисленных ниже в подразделе \fBСпециальные параметры\fP. Переменная \fIvariable\fP \- это параметр, обозначающий \fIname\fP. Переменная имеет значение \fIvalue\fP и ноль или более атрибутов \fIattributes\fP. Атрибуты присваиваются с помощью встроенной команды \fBdeclare\fP (смотрите описание команды \fBdeclare\fP ниже в разделе .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP). Встроенные команды \fBexport\fP и \fBreadonly\fP назначают специальные атрибуты. .PP Параметр считается установленным, если ему было присвоено значение. Строка ноль является допустимым значением. После того, как переменная установлена, ее можно отменить только с помощью встроенной команды \fBunset\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). .PP Значение \fIvariable\fP присваивается с помощью инструкции вида .RS .PP \fIname\fP=[\fIvalue\fP] .RE .PP Если \fIvalue\fP не задано, то переменной присваивается нулевая строка. Все \fIvalue\fP расширяются тильдой, параметрами и переменными, заменой команд, арифметическим расширением и удалением кавычек (смотрите раздел .SM \fBРАСШИРЕНИЕ\fP ниже). Если для переменной задан атрибут целое число \fBinteger\fP, то \fIvalue\fP вычисляется как арифметическое выражение, даже если расширение \fB$((\fP.\|.\|.\&\fB))\fP не используется (смотрите подраздел \fBАрифметическое расширение\fP ниже). Разделение слов и расширение названия пути не выполняются. Операторы присваивания могут также использоваться в качестве аргументов для встроенных команд \fBalias\fP, \fBdeclare\fP, \fBtypeset\fP, \fB\%export\fP, \fBreadonly\fP и \fBlocal\fP (команды \fIdeclaration\fP). В режиме posix эти встроенные элементы могут появляться в команде после одного или нескольких экземпляров встроенного элемента \fBcommand\fP и сохранять свойства выражения присваивания. .PP В контексте, когда оператор присваивания присваивает значение переменной оболочки или индексу массива, оператор присваивания присваивает значение переменной оболочки или индексу массива .Q += оператор добавляет к предыдущему значению переменной. Это включает аргументы для команд \fIdeclaration\fP, таких как \fB\%declare\fP, которые принимают выражение присваивания. Когда .Q += применяется к переменной, для которой задан атрибут \fB\%integer\fP, текущее значение переменной и значение \fIvalue\fPвычисляются как арифметические выражения, а сумма результатов присваивается в качестве значения переменной. Текущее значение обычно является целочисленной константой, но может быть и выражением. Когда .Q += применяется к переменной массива с помощью составного присваивания (смотрите подраздел \fBМассивы\fP ниже), значение переменной не является неустановленным (как это происходит при использовании .Q = ), и новые значения добавляются к массиву, начиная с значения, на единицу превышающего максимальный индекс массива (для индексированных массивов), или добавляются в качестве дополнительных пар ключ\-значение в ассоциативном массиве. При применении к переменной, имеющей строковое значение, \fIvalue\fP расширяется и добавляется к значению переменной. .PP Переменной можно присвоить атрибут \fInameref\fP, используя опцию \fB\-n\fP для встроенных команд \fBdeclare\fP или \fBlocal\fP (смотрите описания \fBdeclare\fP и \fBlocal\fP ниже), чтобы создать \fInameref\fP или ссылку на еще одну переменную. Это позволяет косвенно манипулировать переменными. Всякий раз, когда ссылаются на переменную \fInameref\fP, то ей присваивают значение, сбрасывают значение или изменяют ее атрибуты (кроме использования или изменения самого атрибута \fInameref\fP), операция фактически выполняется над переменной, указанной значением переменной nameref. Переменная nameref обычно используется в функциях оболочки для ссылки на переменную, название которой передается в качестве аргумента функции. Например, если название переменной передается в функцию оболочки в качестве первого аргумента, то командой .PP .RS .EX declare \-n ref=$1 .EE .RE .PP внутри функции создается локальная переменная nameref, значением которой является название переменной \fBref\fP, передаваемое в качестве первого аргумента. Ссылки и присвоения переменной \fBref\fP, а также изменения ее атрибутов рассматриваются как ссылки, присвоения и модификации атрибутов переменной, название которой было передано как \fB$1\fP. Если управляющая переменная в цикле \fBfor\fP имеет атрибут nameref, список слов может быть списком переменных оболочки, и при выполнении цикла для каждого слова в списке, в свою очередь, устанавливается ссылка на название. Переменным массива не может быть присвоен атрибут \fBnameref\fP. Однако переменные nameref могут ссылаться на переменные массива и переменные массива с индексом. Значения nameref можно отменить, используя опцию \fB\-n\fP для встроенной команды \fBunset\fP. В противном случае, если \fBunset\fP выполняется с названием переменной nameref в качестве аргумента, то переменная, на которую ссылается переменная nameref, не установлена. .PP Когда оболочка запускается, она считывает свою окружающую среду и создает переменную оболочки из каждой переменной окружающей среды, которая имеет допустимое название, как описано ниже (смотрите раздел .SM \fBОКРУЖАЮЩАЯ СРЕДА\fP). .SS "Позиционные параметры" Позиционный параметр \fIpositional parameter\fP \- это параметр, обозначаемый одной или несколькими цифрами, отличными от цифры 0. Позиционные параметры назначаются из аргументов командной строки при ее вызове и могут быть переназначены с помощью встроенной команды \fBset\fP. Позиционные параметры не могут быть назначены с помощью команды присваивания. Позиционные параметры временно заменяются при выполнении функции оболочки (смотрите раздел .SM \fBФУНКЦИИ\fP ниже). .PP Если позиционный параметр, состоящий более чем из одной цифры, раскрывается, то он должен быть заключен в фигурные скобки (смотрите раздел .SM \fBРАСШИРЕНИЕ\fP ниже). Без фигурных скобок цифра, следующая за $, может относиться только к одному из первых девяти позиционных параметров (\fB$1\-$9\fP) или к специальному параметру \fB$0\fP (смотрите следующий раздел). .SS "Специальные параметры" Оболочка обрабатывает несколько параметров особым образом. На эти параметры можно только ссылаться; присвоение им значений запрещено. Специальные параметры обозначаются одним из следующих символов. .TP .PD 0 \fB*\fP (\fB$*\fP) Расширяется до позиционных параметров, начиная с единицы. Если расширение не заключено в двойные кавычки, каждый позиционный параметр расширяется до отдельного слова. В контекстах, где выполняется расширение слов, эти слова подлежат дальнейшему разбиению на слова и расширению названия пути. Когда расширение происходит в двойных кавычках, оно расширяется до одного слова со значением каждого параметра, разделенного первым символом переменной .SM \fBIFS\fP. То есть, \fB\*"$*\*"\fP эквивалентно \fB\*"$1\fP\fIc\fP\fB$2\fP\fIc\fP\fB.\|.\|.\*"\fP, где \fIc\fP \- это первый символ значения переменной .SM \fBIFS\fP. Если значение .SM \fBIFS\fP не задано, то параметры разделяются пробелами. Если значение .SM \fBIFS\fP равно ноль, то параметры объединяются без промежуточных разделителей. .TP \fB@\fP (\fB$@\fP) Расширяется до позиционных параметров, начиная с единицы. В контекстах, где выполняется разбиение слов, это расширяет каждый позиционный параметр до отдельного слова; если они не заключены в двойные кавычки, эти слова подлежат разбиению на слова. В контекстах, где разделение слов не выполняется, например, в части значений оператора присваивания, оно расширяется до одного слова, при этом каждый позиционный параметр разделяется пробелом. Когда расширение происходит в двойных кавычках и выполняется разделение слов, каждый параметр расширяется до отдельного слова. Таким образом, \fB\&\*"$@\*"\fP эквивалентно \fB\&\*"\&$1\&\*"\ \*"$2\*"\ .\|.\|.\fP Если в слове используется расширение в двойных кавычках в пределах слова расширение первого параметра соединяется с расширением начальной части исходного слова, а расширение последнего параметра соединяется с расширением последней части исходного слова. Когда позиционных параметров нет, \fB\&\*"$@\*"\fP и \fB$@\fP расширяются до нуля (т.е. удаляются). .TP \fB#\fP (\fB$#\fP) Расширяется до количества позиционных параметров в десятичной системе счисления. .TP \fB?\fP (\fB$?\fP) Расширяется до статуса завершения последней выполненной команды. .TP \fB\-\fP (\fB$\-\fP) Расширяется до флагов текущей опции, указанных при вызове встроенной командой \fBset\fP или установленных самой оболочкой (например, опцией \fB\-i\fP). .TP \fB$\fP (\fB$$\fP) Расширяется до идентификатора процесса ID оболочки. В подоболочке он расширяется до идентификатора процесса родительской оболочки, а не подоболочки. .TP \fB!\fP (\fB$!\fP) Расширяется до идентификатора процесса задания, которое последним было переведено в фоновый режим, независимо от того, выполняется ли оно как асинхронная команда или с использованием встроенной команды \fBbg\fP (смотрите раздел .SM \fBУПРАВЛЕНИЕ ЗАДАНИЕМ\fP ниже). .TP \fB0\fP (\fB$0\fP) Расширяется до названия оболочки или сценария оболочки. Это значение задается при инициализации оболочки. Если \fBbash\fP вызывается файлом команд, то \fB$0\fP присваивается название этого файла. Если \fBbash\fP запускается с опцией \fB\-c\fP, то \fB$0\fP присваивается значение первого аргумента после строки, которая должна быть выполнена, если таковая присутствует. В противном случае ей присваивается значение названия файла, используемого для вызова \fBbash\fP, как указано в нулевом аргументе. .PD .SS "Переменные оболочки" Оболочка устанавливает следующие переменные: .PP .PD 0 .TP \fB_\fP (\fB$_\fP, символ подчеркивания) Это слово имеет несколько значений в зависимости от контекста. При запуске оболочки \fB_\fP задается как путь, используемый для вызова оболочки или исполняемого сценария оболочки, который передается в окружающей среде или в списке аргументов. Впоследствии, после расширения, он расширяется до последнего аргумента предыдущей простой команды, выполненной на переднем плане. Также устанавливается полный путь, используемый для вызова каждой команды, которая выполняется и помещается в окружающую среду, экспортируемую для этой команды. При проверке почты \fB$_\fP расширяется до названия проверяемого в данный момент почтового файла. .TP \fBBASH\fP Расширяется до полного названия файла, используемого для вызова этого экземпляра \fBbash\fP. .TP \fBBASHOPTS\fP Список включенных опций оболочки, разделенных двоеточием. Каждое слово в списке является допустимым аргументом для опции \fB\-s\fP для встроенной команды \fBshopt\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). Опции, отображаемые в .SM \fBBASHOPTS\fP, \- это те, о которых \fBshopt\fP сообщает как о \fIon\fP. Если эта переменная присутствует в окружающей среде при запуске \fBbash\fP, то оболочка включает каждую опцию в списке перед чтением любых файлов запуска. Если эта переменная экспортирована, то дочерние оболочки будут включать каждую опцию в списке. Эта переменная доступна только для чтения. .TP \fBBASHPID\fP Расширяется до идентификатора ID текущего процесса \fBbash\fP. Это отличается от \fB$$\fP при определенных обстоятельствах, например, для подоболочек, которые не требуют повторной инициализации \fBbash\fP. Присвоение .SM \fBBASHPID\fP не имеет никакого эффекта. Если значение .SM \fBBASHPID\fP не задано, то оно теряет свои специальные свойства, даже если впоследствии оно будет сброшено. .TP \fBBASH_ALIASES\fP Переменная ассоциативного массива, элементы которой соответствуют внутреннему списку псевдонимов, поддерживаемому встроенной командой \fBalias\fP. Элементы, добавленные в этот массив, отображаются в списке псевдонимов; однако сброс настроек элементов массива в настоящее время не приводит к удалению псевдонимов из списка псевдонимов. Если значение .SM \fBBASH_ALIASES\fP не задано, то оно теряет свои специальные свойства, даже если впоследствии будет сброшено. .TP \fBBASH_ARGC\fP Переменная массива, значения которой представляют собой количество параметров в каждом кадре текущего стека вызовов для выполнения \fBbash\fP. Количество параметров текущей подпрограммы (функции оболочки или сценария, выполняемого с помощью команд \fB.\fP или \fBsource\fP) находится в верхней части стека. Когда выполняется подпрограмма, количество переданных параметров записывается в .SM \fBBASH_ARGC\fP. Оболочка устанавливает значение .SM \fBBASH_ARGC\fP только в режиме расширенной отладки (смотрите описание опции \fBextdebug\fP для встроенной команды \fBshopt\fP ниже). Установка \fBextdebug\fP после того, как оболочка начала выполнять сценарий, или обращение к этой переменной, когда значение \fBextdebug\fP не задано, может привести к несогласованным значениям. Присвоения .SM \fBBASH_ARGC\fP не имеют никакого эффекта и оно не может быть отменено. .TP \fBBASH_ARGV\fP Переменная массива, содержащая все параметры текущего стека вызовов для выполнения \fBbash\fP. Последний параметр последнего вызова подпрограммы находится в верхней части стека; первый параметр начального вызова находится в нижней части стека. Когда выполняется подпрограмма, оболочка помещает предоставленные параметры в .SM \fBBASH_ARGV\fP. Оболочка устанавливает значение .SM \fBBASH_ARGV\fP только в режиме расширенной отладки (смотрите описание параметра \fBextdebug\fP для встроенной команды \fBshopt\fP ниже). Установка \fBextdebug\fP после того, как оболочка начала выполнять сценарий, или обращение к этой переменной, когда значение \fBextdebug\fP не задано, может привести к несогласованным значениям. Присвоения .SM \fBBASH_ARGV\fP не имеют никакого эффекта и оно не может быть отменено. .TP \fBBASH_ARGV0\fP При обращении к этой переменной она расширяется до названия оболочки или сценария оболочки (идентично \fB$0\fP; смотрите описание специального параметра 0 выше). Присвоение значения .SM \fBBASH_ARGV0\fP присваивает \fB$0\fP то же значение. Если значение .SM \fBBASH_ARGV0\fP не задано, то оно теряет свои специальные свойства, даже если впоследствии будет сброшено. .TP \fBBASH_CMDS\fP Переменная ассоциативного массива, элементы которой соответствуют внутренней хэш\-таблице команд, поддерживаемой встроенной командой \fBhash\fP. Добавление элементов в этот массив приводит к их отображению в хэш\-таблице; однако удаление элементов массива в настоящее время не приводит к удалению названий команд из хэш\-таблицы. Если значение .SM \fBBASH_CMDS\fP не задано, то оно теряет свои специальные свойства, даже если впоследствии будет сброшено. .TP \fBBASH_COMMAND\fP Расширяется до команды, которая выполняется в данный момент или вот\-вот будет выполнена, если только оболочка не выполняет команду в результате перехвата, и в этом случае это команда, выполняющаяся во время перехвата. Если значение .SM \fBBASH_COMMAND\fP не задано, то оно теряет свои специальные свойства, даже если впоследствии будет сброшено. .TP \fBBASH_EXECUTION_STRING\fP Аргумент команды для опции вызова \fB\-c\fP. .TP \fBBASH_LINENO\fP Переменная массива, элементами которой являются номера строк в исходных файлах, в которых был вызван каждый соответствующий элемент .SM \fBFUNCNAME\fP. \fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP \- это номер строки в исходном файле (\fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP), где \fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP был вызван (или \fB${BASH_LINENO[\fP\fI$i\-1\fP\fB]}\fP, если на него ссылаются в другой функции оболочки). Используйте .SM \fBLINENO\fP, чтобы получить текущий номер строки. Присвоение .SM \fBBASH_LINENO\fP не имеет никакого эффекта и не может быть отменено. .TP \fBBASH_LOADABLES_PATH\fP Список каталогов, разделенных двоеточием, в которых команда \fBenable\fP выполняет поиск динамически загружаемых встроенных команд. .TP \fBBASH_MONOSECONDS\fP При каждом обращении к этой переменной она расширяется до значения, возвращаемого системными монотонными часами, если таковые имеются. Если монотонных часов нет, это эквивалентно \fBEPOCHSECONDS\fP. Если значение .SM \fBBASH_MONOSECONDS\fP не задано, то оно теряет свои специальные свойства, даже если впоследствии будет сброшено. .TP \fBBASH_REMATCH\fP Переменная массива, элементы которой присваиваются двоичным оператором \fB=\*~\fP условной команде \fB[[\fP. Элемент с индексом 0 \- это часть строки, соответствующая всему регулярному выражению. Элемент с индексом \fIn\fP \- это часть строки, соответствующая \fIn\fP\-му подвыражению, заключенному в круглые скобки. .TP \fBBASH_SOURCE\fP Переменная массива, элементами которой являются названия исходных файлов, в которых определены соответствующие названия функций оболочки в переменной массива .SM \fBFUNCNAME\fP. Функция оболочки \fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP определена в файле \fB${BASH_SOURCE[\fP\fI$i\fP\fB]}\fP и вызывается из \fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP. Присвоения .SM \fBBASH_SOURCE\fP не имеют никакого эффекта и не могут быть отменены. .TP \fBBASH_SUBSHELL\fP Увеличивается на единицу в каждой подоболочке или окружающей среде подоболочек, когда оболочка начинает выполняться в этой среде. Начальное значение равно 0. Если значение .SM \fBBASH_SUBSHELL\fP не задано, то оно теряет свои специальные свойства, даже если впоследствии будет сброшено. .TP \fBBASH_TRAPSIG\fP Присваивается номер сигнала, соответствующий выполняемому действию перехватчика во время его выполнения. Смотрите описание \fBtrap\fP в разделе .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже для получения информации о номерах сигналов и выполнении перехватчика trap. .TP \fBBASH_VERSINFO\fP Переменная массива, доступная только для чтения, элементы которой содержат информацию о версии для данного экземпляра \fBbash\fP. Элементам массива присваиваются следующие значения: .PP .RS .TP 24 \fBBASH_VERSINFO[\fP0\fB]\fP Старший номер версии (the \fIrelease\fP). .TP \fBBASH_VERSINFO[\fP1\fB]\fP Младший номер версии (the \fIversion\fP). .TP \fBBASH_VERSINFO[\fP2\fB]\fP Уровень исправления. .TP \fBBASH_VERSINFO[\fP3\fB]\fP Версия сборки. .TP \fBBASH_VERSINFO[\fP4\fB]\fP Статус выпуска (например, \fIbeta\fP). .TP \fBBASH_VERSINFO[\fP5\fB]\fP Значение .SM \fBMACHTYPE\fP. .RE .TP \fBBASH_VERSION\fP Расширяется до строки, описывающей версию этого экземпляра \fBbash\fP (например, реализация 5.2.37(3)). .TP \fBCOMP_CWORD\fP Индекс слова в \fB${COMP_WORDS}\fP, содержащего текущее положение курсора. Эта переменная доступна только в функциях оболочки, вызываемых средствами завершения программы (смотрите подраздел \fBЗавершение программы\fP ниже). .TP \fBCOMP_KEY\fP Клавиша (или последняя клавиша в последовательности клавиш), используемая для вызова текущей функции завершения. Эта переменная доступна только в функциях командной строки и внешних командах, вызываемых средствами программируемого завершения (смотрите подраздел \fBПрограммируемое завершение\fP ниже). .TP \fBCOMP_LINE\fP Текущая командная строка. Эта переменная доступна только в функциях оболочки и внешних командах, вызываемых средствами завершения программы (смотрите подраздел \fBЗавершение программы\fP ниже). .TP \fBCOMP_POINT\fP Индекс текущей позиции курсора относительно начала текущей команды. Если текущая позиция курсора находится в конце текущей команды, то значение этой переменной равно \fB${#COMP_LINE}\fP. Эта переменная доступна только в функциях оболочки и внешних командах, вызываемых средствами завершения программ (смотрите подраздел \fBЗавершение программы\fP ниже). .TP \fBCOMP_TYPE\fP Присваивается целочисленное значение, соответствующее типу попытки завершения, вызвавшей вызов функции завершения: \fITAB\fP, для обычного завершения \- \fI?\fP, для перечисления завершений после последовательных табуляций \- \fI!\fP, для перечисления альтернатив при частичном завершении слова \- \fI@\fP, вывод списка дополнений, если слово не изменено, или \fI%\fP для завершения меню. Эта переменная доступна только в функциях оболочки и внешних командах, вызываемых средствами программируемого завершения (смотрите \fBПрограммируемое завершение\fP ниже). .TP \fBCOMP_WORDBREAKS\fP Набор символов, которые библиотека \fBreadline\fP обрабатывает как разделители слов при выполнении завершения слова. Если значение .SM \fBCOMP_WORDBREAKS\fP не задано, то оно теряет свои специальные свойства, даже если впоследствии оно будет сброшено. .TP \fBCOMP_WORDS\fP Переменная типа массива (смотрите \fBМассивы\fP ниже), состоящая из отдельных слов в текущей командной строке. Строка разбивается на слова так, как ее разбила бы \fBreadline\fP, используя .SM \fBCOMP_WORDBREAKS\fP, как описано выше. Эта переменная доступна только в функциях оболочки, вызываемых средствами программируемого завершения (см. подраздел \fBЗавершение программ\fP ниже). .TP \fBCOPROC\fP Переменная массива (смотрите подраздел \fBМассивы\fP ниже), созданная для хранения дескрипторов файлов для вывода и ввода в не именованный сопроцесс (смотрите подраздел \fBСопроцессы\fP выше). .TP \fBDIRSTACK\fP Переменная массива (смотрите подраздел \fBМассивы\fP ниже), содержащая текущее содержимое стека каталогов. Каталоги отображаются в стеке в том порядке, в котором они отображаются встроенной командой \fBdirs\fP. Присвоение элементам этого массива переменной может использоваться для изменения каталогов, уже находящихся в стеке, но для добавления и удаления каталогов необходимо использовать встроенные команды \fBpushd\fP и \fBpopd\fP. Присвоение этой переменной не изменяет текущий каталог. Если .SM \fBDIRSTACK\fP не установлено, то это теряет свои специальные свойства, даже если впоследствии будет сброшено. .TP \fBEPOCHREALTIME\fP При каждом обращении к этому параметру он увеличивается до количества секунд, прошедших с начала эпохи Unix (смотрите \fItime\fP(3)), в виде значения с плавающей запятой с микросекундной детализацией. Присвоения .SM \fBEPOCHREALTIME\fP игнорируются. Если .SM \fBEPOCHREALTIME\fP не установлено, то оно теряет свои специальные свойства, даже если впоследствии будет сброшено. .TP \fBEPOCHSECONDS\fP Каждый раз, когда этот параметр ссылается, он расширяется до количества секунд с момента начала эпохи Unix (смотрите \fItime\fP(3)). Установка . SM \fBEPOCHSECONDS\fP игнорируется. Если . SM \fBEPOCHSECONDS\fP не задан, то он теряет свои специальные свойства, даже если впоследствии будет сброшен. .TP \fBEUID\fP Расширяется до эффективного пользовательского идентификатора для текущего пользователя, инициализированного при запуске оболочки. Эта переменная доступна только для чтения. .TP \fBFUNCNAME\fP .PD Переменная массива, содержащая названия всех функций оболочки, в настоящее время в стеке вызовов выполнения.Элемент с индексом 0\-это название любой в настоящее время выполняющейся функцию оболочки.Самый нижний элемент (тот, который с самым большим индексом) .Q main . Эта переменная существует только при выполнении функции оболочки. Установка .SM \fBFUNCNAME\fP не действует.Если .SM \fBFUNCNAME\fP не установлена, то она теряет свои специальные свойства, даже если впоследствии будет сброшена. .IP Эта переменная может использоваться с .SM \fBBASH_LINENO\fP и .SM \fBBASH_SOURCE\fP. Каждому элементу .SM \fB\%FUNCNAME\fP соответствуют элементы в .SM \fBBASH_LINENO\fP и .SM \fBBASH_SOURCE\fP для описания стека вызовов. Например, \fB\%${FUNCNAME[\fP\fI$i\fP\fB]}\fP была вызвана из файла \fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP с номером строки \fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP. Встроенная команда \fBcaller\fP отображает текущий стек вызовов, используя эту информацию. .PD 0 .TP \fBGROUPS\fP Переменная массива, содержащая список групп, членом которых является текущий пользователь. Присвоения .SM \fBGROUPS\fP не имеют значения. Если значение .SM \fBGROUPS\fP не задано, то оно теряет свои специальные свойства, даже если впоследствии оно будет сброшено. .TP \fBHISTCMD\fP Номер истории или индекс в списке истории текущей команды. Присвоения .SM \fBHISTCMD\fP не имеют никакого эффекта. Если значение .SM \fBHISTCMD\fP не задано, то оно теряет свои специальные свойства, даже если впоследствии будет сброшено. .TP \fBHOSTNAME\fP Автоматически устанавливается на название текущего хоста. .TP \fBHOSTTYPE\fP Автоматически устанавливает строку, однозначно описывающую тип завершения, на котором выполняется \fBbash\fP. Значение по умолчанию зависит от системы. .TP \fBLINENO\fP При каждом обращении к этому параметру оболочка подставляет десятичное число, представляющее текущий порядковый номер строки (начинающийся с 1) в скрипте или функции. Если его нет в скрипте или функции, то не гарантируется, что подставленное значение будет значимым. Если параметр .SM \fBLINENO\fP не установлен, то он теряет свои специальные свойства, даже если впоследствии будет сброшен. .TP \fBMACHTYPE\fP Автоматически устанавливает строку, полностью описывающую тип системы, на которой выполняется \fBbash\fP, в стандартном формате GNU \fIcpu\-company\-system\fP. Значение по умолчанию зависит от системы. .TP \fBMAPFILE\fP Переменная массива (смотрите подраздел \fBМассивы\fP ниже), созданная для хранения текста, считываемого из встроенного файла \fBmapfile\fP, когда название переменной не указано. .TP \fBOLDPWD\fP Предыдущий рабочий каталог, заданный командой \fBcd\fP. .TP \fBOPTARG\fP Значение последнего аргумента опции, обработанного встроенной командой \fBgetopts\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). .TP \fBOPTIND\fP Индекс следующего аргумента, который будет обработан встроенной командой \fBgetopts\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). .TP \fBOSTYPE\fP Автоматически устанавливает строку, описывающую операционную систему, в которой выполняется \fBbash\fP. Значение по умолчанию зависит от системы. .TP \fBPIPESTATUS\fP Переменная массива (смотрите подраздел \fBМассивы\fP ниже), содержащая список значений статуса завершения команд в конвейере переднего плана, который может состоять только из простой команды (смотрите раздел .SM \fBГРАММАТИКА ОБОЛОЧКИ\fP выше). \fBBash\fP устанавливает .SM \fBPIPESTATUS\fP после выполнения многоэлементных конвейеров, конвейеров с синхронизацией и отменой, простых команд, вложенных оболочек, созданных с помощью оператора, составных команд \fB[[\fP и \fB((\fP, а также после возникновения ошибок, которые приводят к появлению прерываний оболочки при выполнения команды. .TP \fBPPID\fP Идентификатор процесса родительской оболочки. Эта переменная доступна только для чтения. .TP \fBPWD\fP Текущий рабочий каталог, заданный командой \fBcd\fP. .TP \fBRANDOM\fP При каждом обращении к этому параметру он расширяется до случайного целого числа в диапазоне от 0 до 32767. Присвоение значения .SM \fBRANDOM\fP инициализирует (определяет) последовательность случайных чисел. При вводе в генератор случайных чисел того же постоянного значения получается та же последовательность значений. Если значение .SM \fBRANDOM\fP не задано, то оно теряет свои специальные свойства, даже если впоследствии будет сброшено. .TP \fBREADLINE_ARGUMENT\fP Любой числовой аргумент, переданный команде \fB\%readline\fP, которая была определена с помощью .Q "bind \-x" (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже), когда он был вызван. .TP \fBREADLINE_LINE\fP Содержимое буфера строк \fBreadline\fP, предназначенного для использования с .Q "bind \-x" (смотрите .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). .TP \fBREADLINE_MARK\fP Положение метки (сохраненной точки вставки) в буфере строк \fBreadline\fP для использования с .Q "bind \-x" (смотрите ниже раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP). Символы между точкой вставки и меткой часто называются \fIregion\fP. .TP \fBREADLINE_POINT\fP Положение точки вставки в буфере строк \fBreadline\fP для использования с .Q "bind \-x" (смотрите .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). .TP \fBREPLY\fP Устанавливается в строку ввода, считываемую встроенной командой \fBread\fP, когда аргументы не указаны. .TP \fBSECONDS\fP При каждом обращении к этому параметру он увеличивается до количества секунд с момента вызова оболочки. Если значение переменной .SM \fBSECONDS\fP задано, то при последующих обращениях к ней возвращается значение, равное количеству секунд с момента присвоения плюс присвоенное значение. Количество секунд при вызове оболочки и текущее время всегда определяются путем запроса системных часов с разрешением в одну секунду. Если значение .SM \fBSECONDS\fP не задано, оно теряет свои специальные свойства, даже если впоследствии оно будет сброшено. .TP \fBSHELLOPTS\fP Список включенных опций оболочки, разделенных двоеточием. Каждое слово в списке является допустимым аргументом для опции \fB\-o\fP для встроенной команды \fBset\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). Опции, отображаемые в .SM \fBSHELLOPTS\fP, указаны как \fIon\fP в \fBset \-o\fP. Если эта переменная присутствует в окружающей среде при запуске \fBbash\fP, то оболочка включает каждую опцию в списке перед чтением любых файлов запуска. Если эта переменная экспортирована, то дочерние оболочки будут включать каждую опцию в списке. Эта переменная доступна только для чтения. .TP \fBSHLVL\fP Увеличивается на единицу при каждом запуске экземпляра \fBbash\fP. .TP \fBSRANDOM\fP При каждом обращении к этой переменной она преобразуется в 32\-разрядное псевдослучайное число. Генератор случайных чисел не является линейным в системах, поддерживающих .FN /dev/urandom или \fIarc4random\fP(3), поэтому каждое возвращаемое число не имеет отношения к числам, предшествующим ему. Когда генератор случайных чисел не может быть запущен, тогда присвоения этой переменной значений не имеют эффекта. Если .SM \fBSRANDOM\fP сброшено, оно теряет свои специальные свойства, даже если впоследствии будет сброшено. .TP \fBUID\fP Расширяется до идентификатора текущего пользователя, инициализируемого при запуске командной строки. Эта переменная доступна только для чтения. .PD .PP Оболочка использует следующие переменные. В некоторых случаях \fBbash\fP присваивает переменной значение по умолчанию; эти случаи описаны ниже. .PP .PD 0 .TP \fBBASH_COMPAT\fP Это значение используется для настройки уровня совместимости оболочки. Описание различных уровней совместимости и их последствий смотрите в разделе .SM \fBРЕЖИМ СОВМЕСТИМОСТИ ОБОЛОЧКИ\fP ниже. Значением может быть десятичное число (например, 4,2) или целое число (например, 42), соответствующее желаемому уровню совместимости. Если значение для .SM \fBBASH_COMPAT\fP не задано или имеет значение пустой строки, то уровень совместимости устанавливается по умолчанию для текущей версии. Если для .SM \fBBASH_COMPAT\fP задано значение, которое не соответствует ни одному из допустимых уровней совместимости, то оболочка выводит сообщение об ошибке и устанавливает уровень совместимости по умолчанию для текущей версии. Подмножество допустимых значений соответствует уровням совместимости, описанным ниже в разделе .SM \fBРЕЖИМ СОВМЕСТИМОСТИ ОБОЛОЧКИ\fP. Например, 4.2 и 42 являются допустимыми значениями, которые соответствуют опции \fBcompat42\fP команды \fBshopt\fP и устанавливают уровень совместимости равным 42. Текущая версия также является допустимым значением. .TP \fBBASH_ENV\fP Если этот параметр задан, когда \fBbash\fP выполняет сценарий оболочки, то его расширенное значение интерпретируется как название файла, содержащее команды для инициализации оболочки перед чтением и выполнением команд из сценария. Значение .SM \fBBASH_ENV\fP подвергается расширению параметров, замене командами и арифметическому расширению, прежде чем оно будет интерпретировано как название файла. .SM \fBPATH\fP не используется для поиска результирующего названия файла. .TP \fBBASH_XTRACEFD\fP Если задано целое число, соответствующее допустимому файловому дескриптору, то \fBbash\fP записывает выходные данные трассировки, сгенерированные при .Q "set \-x" включении для этого файлового дескриптора, вместо стандартной ошибки. Файловый дескриптор закрывается, если .SM \fBBASH_XTRACEFD\fP сброшено или ему присвоено новое значение. Сброс значения .SM \fBBASH_XTRACEFD\fP или присвоение ему пустой строки приводит к отправке выходных данных трассировки со стандартной ошибкой. Обратите внимание, что установка значения .SM \fBBASH_XTRACEFD\fP равным 2 (файловый дескриптор стандартной ошибки), а затем сброс этого значения приведет к закрытию стандартной ошибки. .TP \fBCDPATH\fP Путь поиска для команды \fBcd\fP. Это разделенный двоеточием список каталогов, в котором оболочка выполняет поиск каталогов, указанных в качестве аргументов команды \fBcd\fP. Примерным значением является .Q .:\*~:/usr . .TP \fBCHILD_MAX\fP Задайте количество завершенных дочерних значений статуса, которые должна запомнить оболочка. \fBBash\fP не позволит уменьшить это значение ниже .SM POSIX \- требуемый минимум, и существует максимальное значение (в настоящее время 8192), которое не может быть превышено. Минимальное значение зависит от системы. .TP \fBCOLUMNS\fP Используется командой \fBselect\fP для определения ширины терминала при печати списков. Устанавливается автоматически, если включена опция \fBcheckwinsize\fP или в интерактивной командной строке при получении команды .SM \fBSIGWINCH\fP. .TP \fBCOMPREPLY\fP Переменная массива, из которой \fBbash\fP считывает возможные завершения, сгенерированные функцией оболочки, вызываемой программируемым средством завершения (смотрите подраздел \fBПрограммируемое завершение\fP ниже). Каждый элемент массива содержит одно возможное завершение. .TP \fBEMACS\fP Если \fBbash\fP найдет эту переменную в окружающей среде, когда оболочка запускается со значением .Q t , предполагающем, что оболочка запущена в буфере оболочки Emacs, и отключено редактирование строк. .TP \fBENV\fP Расширяется и выполняется аналогично .SM \fBBASH_ENV\fP (смотрите раздел .SM \fBВЫЗОВ\fP выше) при вызове интерактивной оболочки в режиме posix. .TP \fBEXECIGNORE\fP Список шаблонов оболочки, разделенных двоеточием (смотрите подраздел \fBСопоставление с шаблоном\fP), определяющий набор названий файлов, которые будут игнорироваться при поиске команд с использованием .SM \fBPATH\fP. Файлы, полные пути к которым соответствуют одному из этих шаблонов, не считаются исполняемыми файлами для целей завершения и выполнения команд с помощью поиска .SM \fBPATH\fP. Это не влияет на поведение команд \fB[\fP, \fBtest\fP и \fB[[\fP. Полные пути в хэш\-таблице команд не зависят от .SM \fBEXECIGNORE\fP. Используйте эту переменную, чтобы игнорировать файлы общей библиотеки, которые имеют установленный бит исполняемого файла, но не являются исполняемыми файлами. При сопоставлении с шаблоном учитывается настройка опции оболочки \fBextglob\fP. .TP \fBFCEDIT\fP Редактор по умолчанию для встроенной команды \fBfc\fP. .TP \fBFIGNORE\fP Разделенный двоеточием список суффиксов, которые следует игнорировать при заполнении названия файла (смотрите .SM \fBБИБЛИОТЕКА READLINE\fP ниже). Название файла, суффикс которого совпадает с одной из записей в .SM \fBFIGNORE\fP, исключается из списка совпадающих названий файлов. Примерным значением является .Q .o:\*~ . .TP \fBFUNCNEST\fP Если задано числовое значение, большее 0, то это определяет максимальный уровень вложенности функции. Вызовы функций, превышающие этот уровень вложенности, приводят к прерыванию текущей команды. .TP \fBGLOBIGNORE\fP Список шаблонов, разделенных двоеточием, определяющий набор названий файлов, которые будут игнорироваться при расширении названия пути. Если название файла, соответствующее шаблону расширения названия пути, также соответствует одному из шаблонов в .SM \fBGLOBIGNORE\fP, то оно удаляется из списка совпадений. Сопоставление с наблоном выполняется с учетом настройки опции оболочки \fBextglob\fP. .TP \fBGLOBSORT\fP .PD Управляет тем, как сортируются результаты расширения названия пути. Значение этой переменной определяет критерии сортировки и порядок сортировки результатов расширения названия пути. Если эта переменная не задана или имеет значение нулевой строки, то при расширении названия пути используется историческое поведение сортировки по названию в лексикографическом порядке возрастания, как определено переменной оболочки .SM \fB\%LC_COLLATE\fP. .IP Если задано, допустимое значение начинается с необязательного \fI+\fP, которое игнорируется, или \fI\-\fP, которое меняет порядок сортировки с восходящего на нисходящий, за которым следует спецификатор сортировки. Допустимыми спецификаторами сортировки являются \fIname\fP, \fI\%numeric\fP, \fIsize\fP, \fImtime\fP, \fIatime\fP, \fIctime\fP и \fIblocks\fP, которые сортируют файлы по названию, названию в числовом, а не лексикографическом порядке, т.е. размеру файла, времяни модификации, времяни доступа, времяни изменения индекса и количеству блоков, соответственно. Если какой\-либо из ключей, отличных от названия, сравнивается как равный (например, если два файла имеют одинаковый размер), то при сортировке название используется в качестве вторичного ключа сортировки. .IP Например, значение \fI\-mtime\fP сортирует результаты в порядке убывания по времени изменения (сначала самое новое). .IP Спецификатор \fInumeric\fP рассматривает названия, состоящие исключительно из цифр, т.е. как числа и сортирует их по их числовому значению (таким образом .Q 2 сортирует до .Q 10 , например). При использовании \fInumeric\fP названия, не содержащие цифр, сортируются после всех названий, состоящих из цифр, и сортируются по названию традиционным способом. .IP Спецификатор сортировки \fInosort\fP полностью отключает сортировку; \fBbash\fP возвращает результаты в том порядке, в котором они считываются из файловой системы, игнорируя любые начальные значения \fI\-\fP. .IP Если спецификатор сортировки отсутствует, то по умолчанию используется значение \fIname\fP, поэтому значение \fI+\fP эквивалентно нулевой строке, а значение \fI\-\fP выполняет сортировку по названию в порядке убывания. Любое недопустимое значение восстанавливает историческое поведение сортировки. .PD 0 .TP \fBHISTCONTROL\fP Разделенный двоеточием список значений, определяющий порядок сохранения команд в списке истории. Если список значений содержит \fIignorespace\fP, то строки, начинающиеся с символа \fBspace\fP, не сохраняются в списке истории. Значение \fIignoredups\fP приводит к тому, что строки, соответствующие предыдущей записи в истории, не сохраняются. Значение \fIignoreboth\fP является сокращением для \fIignorespace\fP и \fIignoredups\fP. Значение \fIerasedups\fP приводит к удалению всех предыдущих строк, соответствующих текущей строке, из списка истории, прежде чем эта строка будет сохранена. Любое значение, отсутствующее в приведенном выше списке, игнорируется. Если значение .SM \fBHISTCONTROL\fP не задано или не содержит допустимого значения, то \fBbash\fP сохраняет все строки, прочитанные синтаксическим анализатором оболочки, в списке истории, в зависимости от значения .SM \fBHISTIGNORE\fP. Если первая строка многострочной составной команды была сохранена, то вторая и последующие строки не проверяются и добавляются в историю независимо от значения .SM \fBHISTCONTROL\fP. Если первая строка не была сохранена, то вторая и последующие строки команды также не будут сохранены. .TP \fBHISTFILE\fP Название файла, в котором сохраняется история команд (смотрите раздел .SM \fBИСТОРИЯ\fP ниже). \fBBash\fP присваивает значение по умолчанию, равное .FN \*~/.bash_history . Если значение .SM \fBHISTFILE\fP не задано или равно нулю, то оболочка не сохраняет историю команд при завершении работы. .TP \fBHISTFILESIZE\fP Максимальное количество строк, содержащихся в файле истории. Когда этой переменной присваивается значение, файл истории при необходимости сокращается, чтобы содержать не более количества записей истории, общее количество которых не превышает этого количества строк, путем удаления самых старых записей. Если список истории содержит многострочные записи, файл истории может содержать больше строк, чем это максимальное значение, чтобы избежать частичных записей истории. Файл истории также сокращается до этого размера после его записи при выходе из оболочки или с помощью встроенной команды \fB\%history\fP. Если значение равно 0, то файл истории сокращается до нулевого размера. Нечисловые значения и числовые значения, меньшие нуля, запрещают усечение. Оболочка устанавливает значение по умолчанию в .SM \fBHISTSIZE\fP после чтения любых файлов запуска. .TP \fBHISTIGNORE\fP Разделенный двоеточием список шаблонов, используемых для определения того, какие командные строки следует сохранить в списке истории. Если командная строка соответствует одному из шаблонов в значении .SM \fBHISTIGNORE\fP, то она не сохраняется в списке истории. Каждый шаблон привязывается к началу строки и должен соответствовать всей строке (\fBbash\fP неявно добавляет .Q \fB*\fP ). Каждый шаблон проверяется на соответствие строке после применения проверок, указанных в .SM \fBHISTCONTROL\fP. В дополнение к обычным символам, соответствующим шаблону оболочки, .Q \fB&\fP совпадающим с предыдущей строкой журнала. Обратная косая черта закрывает строку .Q \fB&\fP ; обратная косая черта удаляется перед попыткой сопоставления. Если первая строка многострочной составной команды была сохранена, вторая и последующие строки не проверяются и добавляются в журнал независимо от значения .SM \fBHISTIGNORE\fP. Если первая строка не была сохранена, то вторая и последующие строки команды также не будут сохранены. Сопоставление с шаблоном выполняется с учетом настройки опции оболочки \fB\%extglob\fP. .IP .SM \fBHISTIGNORE\fP выполняет часть функций .SM \fBHISTCONTROL\fP. Шаблон из .Q & идентичен .Q \%ignoredups , и шаблон .Q "[ ]*" идентичен .Q \%ignorespace . Объединение этих двух шаблонов, разделенных двоеточием, обеспечивает функциональность .Q \%ignoreboth . .TP \fBHISTSIZE\fP Количество команд, которые необходимо запомнить в истории команд (смотрите раздел .SM \fBИСТОРИЯ\fP. Если значение равно 0, то команды не сохраняются в списке истории. Числовые значения, меньшие нуля, приводят к тому, что каждая команда сохраняется в списке истории (ограничений нет). После прочтения любых файлов запуска оболочка устанавливает значение по умолчанию равным 500. .TP \fBHISTTIMEFORMAT\fP Если эта переменная установлена, а не равна нулю, то ее значение используется в качестве строки формата \fIstrftime\fP(3) для печати отметки времени, связанной с каждой записью истории, отображаемой встроенной командой \fBhistory\fP. Если эта переменная установлена, то оболочка записывает временные метки в файл истории, чтобы их можно было сохранять во время сеансов оболочки. При этом используется символ комментария к истории, чтобы отличать временные метки от других строк истории. .TP \fBHOME\fP Домашний каталог текущего пользователя; аргумент по умолчанию для встроенной команды \fBcd\fP. Значение этой переменной также используется при расширении тильды. .TP \fBHOSTFILE\fP Содержит название файла в том же формате .FN /etc/hosts который может прочитать оболочка, когда ей потребуется ввести название хоста. Список возможных дополнений названия хоста может быть изменен во время работы оболочки; при следующей попытке завершения названия хоста после изменения значения \fBbash\fP добавляет содержимое нового файла в существующий список. Если переменная \fBHOSTFILE\fP задана, но не имеет значения или не содержит названия файла, доступного для чтения, то оболочка \fBbash\fP попытается прочитать .FN /etc/hosts чтобы получить список возможных дополнений к названию хоста. Если значение .SM \fBHOSTFILE\fP не задано, то \fBbash\fP очищает список названий хостов. .TP \fBIFS\fP Внутренний разделитель полей \fIInternal Field Separator\fP, который используется для разделения слов после расширения и для разделения строк на слова с помощью встроенной команды \fBread\fP. Разделение слов описано ниже в разделе .SM \fBРАСШИРЕНИЕ\fP. Значение по умолчанию равно .Q . .TP \fBIGNOREEOF\fP Управляет действием интерактивной оболочки при получении символа .SM \fBEOF\fP в качестве единственного входного сигнала. Если задано, то это значение равно количеству последовательных символов .SM \fBEOF\fP, которые должны быть введены в качестве первых символов в строке ввода перед завершением работы \fBbash\fP. Если переменная задана, но не имеет числового значения или значение равно нулю, то значение по умолчанию равно 10. Если значение не задано, то .SM \fBEOF\fP означает окончание ввода в оболочку. .TP \fBINPUTRC\fP Название файла для файла запуска \fBreadline\fP, которое переопределяет значение по умолчанию .FN \*~/.inputrc (смотрите раздел .SM \fBБИБЛИОТЕКА READLINE\fP ниже). .TP \fBINSIDE_EMACS\fP Если эта переменная появляется в окружающей среде при запуске оболочки, то \fBbash\fP предполагает, что она выполняется внутри буфера оболочки Emacs и может отключить редактирование строк, в зависимости от значения .SM \fBTERM\fP. .TP \fBLANG\fP Используется для определения локали для любой категории, не выбранной специально, с помощью переменной, начинающейся с \fBLC_\fP. .TP \fBLC_ALL\fP Эта переменная переопределяет значение .SM \fBLANG\fP и любой другой переменной \fBLC_\fP, определяющей локаль. .TP \fBLC_COLLATE\fP Эта переменная определяет порядок сопоставления, используемый при сортировке результатов расширения названия пути, и определяет диапазон выражений , классов эквивалентности и сопоставляющих последовательностей при расширении названия пути и сопоставлении с образцом. .TP \fBLC_CTYPE\fP Эта переменная определяет интерпретацию символов и поведение классов символов при расширении названия пути и сопоставлении с шаблоном. .TP \fBLC_MESSAGES\fP Эта переменная определяет локаль, используемую для перевода строк, заключенных в двойные кавычки, перед которыми стоит символ \fB$\fP. .TP \fBLC_NUMERIC\fP Эта переменная определяет категорию локали, используемой для форматирования чисел. .TP \fBLC_TIME\fP Эта переменная определяет категорию локали, используемой для форматирования данных и времени. .TP \fBLINES\fP Используется командой \fBselect\fP для определения длины столбца при печати списков выбора. Устанавливается автоматически, если включена опция \fBcheckwinsize\fP, или в интерактивной оболочке при получении .SM \fBSIGWINCH\fP. .TP \fBMAIL\fP Если в качестве значения задано название файла или каталога, а переменная .SM \fBMAILPATH\fP не задана, то \fBbash\fP информирует пользователя о поступлении почты в указанный файл или каталог в формате Maildir. .TP \fBMAILCHECK\fP Указывает, как часто (в секундах) \fBbash\fP проверяет почту. Значение по умолчанию равно 60 секундам. Когда приходит время проверять почту, оболочка выполняет это перед отображением основного запроса. Если эта переменная не задана или ей присвоено значение, которое не является числом, большим или равным нулю, то оболочка отключает проверку почты. .TP \fBMAILPATH\fP Разделенный двоеточием список названий файлов, которые необходимо проверить на наличие почты. Сообщение, которое будет распечатываться при поступлении почты в определенный файл, можно указать, отделив название файла от сообщения символом .Q ? . При использовании в тексте сообщения, \fB$_\fP расширяется до названия текущего почтового файла. Например: .RS .PP .EX \fBMAILPATH\fP=\*'/var/mail/bfox?\*"You have mail\*":\*~/shell\-mail?\*"$_ has mail!\*"\*' .EE .PP Оболочку \fBBash\fP можно настроить так, чтобы для этой переменной указывалось значение по умолчанию (по умолчанию значения нет), но расположение используемых ею файлов пользовательской почты зависит от системы (например, /var/mail/\fB$USER\fP). .RE .TP \fBOPTERR\fP Если установлено значение 1, то \fBbash\fP отображает сообщения об ошибках, сгенерированные встроенной командой \fBgetopts\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). .SM \fBOPTERR\fP инициализируется значением 1 при каждом вызове оболочки или выполнении сценария оболочки. .TP \fBPATH\fP Путь поиска команд. Это разделенный двоеточием список каталогов, в которых оболочка выполняет поиск команд (смотрите раздел .SM \fBВЫПОЛНЕНИЕ КОМАНДЫ\fP ниже). Название каталога нулевой длины (null) в значении .SM \fBPATH\fP указывает на текущий каталог. Название каталога с нулевым значением может быть представлено в виде двух смежных двоеточий или в виде начального или конечного двоеточия. Путь по умолчанию зависит от системы и устанавливается администратором, устанавливающим \fBbash\fP. Обычно используется следующее значение .RS .RS 5n .EX /usr/local/bin:/usr/local/sbin:.if \n(LL<78n .br /usr/bin:/usr/sbin:/bin:/sbin .EE .RE .RE .TP \fBPOSIXLY_CORRECT\fP Если эта переменная находится в окружающей среде при запуске \fBbash\fP, то оболочка переходит в режим posix перед чтением файлов запуска, как если бы была указана опция вызова \fB\-\-posix\fP. Если она установлена во время работы оболочки, то \fBbash\fP включает режим posix, как если бы команда .Q "set \-o posix" была выполнена. Когда оболочка переходит в режим posix, она устанавливает эту переменную, если она еще не была установлена. .TP \fBPROMPT_COMMAND\fP Если эта переменная задана и является массивом, то значение каждого заданного элемента выполняется как команда перед выдачей каждого основного запроса. Если эта переменная задана, но не является массивом, то ее значение используется в качестве команды для выполнения. .TP \fBPROMPT_DIRTRIM\fP Если задано значение, большее нуля, то это значение используется в качестве количества завершающих компонентов каталога, которые будут сохранены при расширении командной строки \fB\ew\fP и \fB\eW\fP (смотрите раздел .SM \fBПОДСКАЗКИ\fP ниже). Удаленные символы заменяются многоточием. .TP \fBPS0\fP Значение этого параметра раскрывается (смотрите .SM \fBПОДСКАЗКА\fP ниже) и отображается интерактивной оболочкой после считывания команды и перед ее выполнением. .TP \fBPS1\fP Значение этого параметра раскрывается (смотрите ниже раздел " .SM \fBПОДСКАЗКИ\fP") и используется в качестве основной строки запроса. Значение по умолчанию \- .Q \es\-\ev\e$\ . .TP \fBPS2\fP Значение этого параметра расширяется, как и в случае с .SM \fBPS1\fP и используется в качестве дополнительной строки запроса. По умолчанию используется .Q >\ . .TP \fBPS3\fP Значение этого параметра используется в качестве запроса для команды \fBselect\fP (смотрите раздел .SM \fBГРАММАТИКА ОБОЛОЧКИ\fP выше). .TP \fBPS4\fP Значение этого параметра расширяется, как и в случае с .SM \fBPS1\fP и значение выводится перед отображением каждой команды \fBbash\fP во время трассировки выполнения. Первый символ расширенного значения .SM \fBPS4\fP при необходимости повторяется несколько раз, чтобы указать несколько косвенных уровней. По умолчанию используется .Q +\ . .TP \fBSHELL\fP Эта переменная расширяется до полного пути к оболочке. Если она не задана при запуске оболочки, то \fBbash\fP присваивает ей полный путь к оболочке входа текущего пользователя. .TP \fBTIMEFORMAT\fP Значение этого параметра используется в качестве строки формата, указывающей, как должна отображаться информация о времени для конвейеров с префиксом зарезервированного слова \fBtime\fP. Символ \fB%\fP вводит управляющую последовательность, которая расширяется до значения времени или другой информации. Ниже приведены управляющие последовательности и их значения; квадратные скобки обозначают необязательные части. .PP .RS .PD 0 .TP 10 \fB%%\fP Буква \fB%\fP. .TP \fB%[\fP\fIp\fP\fB][l]R\fP Прошедшее время в секундах. .TP \fB%[\fP\fIp\fP\fB][l]U\fP Количество процессорных секунд, затраченных процессором в пользовательском режиме. .TP \fB%[\fP\fIp\fP\fB][l]S\fP Количество процессорных секунд, затраченных процессором в системном режиме. .TP \fB%P\fP Процент использования процессора, вычисляемый как (%U + %S) / %R. .PD .RE .IP Необязательно \fIp\fP \- это цифра, определяющая точность \fIprecision\fP, т. е. количество дробных разрядов после десятичной точки. Значение 0 не приводит к выводу десятичной точки или дроби. \fBtime\fP выводит не более шести цифр после запятой; значения \fIp\fP, превышающие 6, изменяются на 6. Если \fIp\fP не указано, то \fBtime\fP выводит три цифры после десятичной точки. .IP Необязательная величина \fBl\fP задает более длинный формат, включая минуты, для формы \fIMM\fPm\fISS\fP.\fIFF\fPs. Значение \fIp\fP определяет, будет ли включена дробная часть или нет. .IP Если эта переменная не задана, то \fBbash\fP действует так, как если бы она имела значение \fB$\*'\enreal\et%3lR\enuser\et%3lU\ensys\et%3lS\*'\fP. Если значение равно нулю, то \fBbash\fP не отображает никакой временной информации. При отображении строки формата добавляется завершающая новая строка. .PD 0 .TP \fBTMOUT\fP Если задано значение, большее нуля, то встроенная команда \fBread\fP использует это значение в качестве тайм\-аута по умолчанию. Команда \fBselect\fP завершается, если входные данные не поступают по истечении .SM \fBTMOUT\fP секунд, когда входные данные поступают с терминала. В интерактивной оболочке это значение интерпретируется как количество секунд, в течение которых требуется дождаться ввода строки после выдачи основного запроса. \fBBash\fP завершает работу после ожидания этого количества секунд, если полная строка ввода не поступает. .TP \fBTMPDIR\fP Если задано, то \fBbash\fP использует его значение в качестве названия каталога, в котором \fBbash\fP создает временные файлы для использования оболочкой. .TP \fBauto_resume\fP Эта переменная управляет взаимодействием консоли с пользователем и управлением заданиями. Если эта переменная установлена, то простые команды, состоящие всего из одного слова, без перенаправлений, рассматриваются как кандидаты на возобновление существующего остановленного задания. Здесь не допускается двусмысленность; если есть несколько заданий, начинающихся со слова или содержащих его, то выбирается задание, к которому был последний доступ. В данном контексте название \fIname\fP остановленного задания \- это командная строка, используемая для его запуска, как показано в \fBjobs\fP. Если задано значение \fIexact\fP, то слово должно точно соответствовать названию остановленного задания; если задано значение \fIsubstring\fP, то слово должно соответствовать подстроке названия остановленного задания. Значение \fIsubstring\fP обеспечивает функциональность, аналогичную идентификатору задания \fB%?\fP (смотрите раздел .SM \fBУПРАВЛЕНИЕ ЗАДАНИЕМ\fP ниже). Если задано любое другое значение (например, \fIprefix\fP), то слово должно быть префиксом названия остановленного задания; это обеспечивает функциональность, аналогичную идентификатору задания \fB%\fP\fIstring\fP. .TP \fBhistchars\fP Два или три символа, которые управляют расширением истории, быстрой заменой и токенизацией (смотрите раздел .SM \fBРАСШИРЕНИЕ ИСТОРИИ\fP ниже). Первый символ \- это символ \fIhistory expansion\fP, с которого обычно начинается с расширения истории .Q \fB!\fP . Второй символ \- это символ \fIquick substitution\fP (быстрая замена), обычно .Q \fB\*^\fP . Если он появляется в качестве первого символа в строке, то подстановка в историю повторяет предыдущую команду, заменяя одну строку другой. Необязательный третий символ \- это символ комментария к истории \fIhistory comment\fP, обычно .Q \fB#\fP , который указывает на то, что оставшаяся часть строки является комментарием, когда она появляется в качестве первого символа слова. Символ комментария к истории отключает подстановку в историю оставшихся слов в строке. Это не обязательно приводит к тому, что синтаксический анализатор оболочки обрабатывает оставшуюся часть строки как комментарий. .PD .SS Массивы \fBBash\fP предоставляет одномерные индексированные и ассоциативные массивы переменных. В качестве индексированного массива может использоваться любая переменная; встроенная команда \fBdeclare\fP явно определяет массив. Нет ни максимального ограничения на размер массива, ни каких\-либо требований к тому, чтобы элементы индексировались или назначались последовательно. Ссылки на индексированные массивы выполняются с использованием арифметических выражений, которые должны быть расширены до целого числа (смотрите ниже раздел .SM \fBАРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ\fP) и основаны на нуле; ссылки на ассоциативные массивы выполняются с использованием произвольных строк. Если не указано иное, то индексы индексированных массивов должны быть неотрицательными целыми числами. .PP Оболочка выполняет расширение параметров и переменных, арифметическое расширение, подстановку команд и удаление кавычек из индексов массива. Поскольку это потенциально может привести к появлению пустых строк, то индексация по нижнему индексу рассматривает их как выражения, значение которых равно 0. .PP Оболочка выполняет расширение тильдой, расширение параметрами и переменными, арифметическое расширение, подстановку команд и удаление кавычек в индексах ассоциативного массива. Пустые строки не могут использоваться в качестве ключей ассоциативного массива. .PP \fBBash\fP автоматически создает индексированный массив, если какой\-либо переменной присваивается значение с использованием синтаксиса .RS \fIname\fP[\fIsubscript\fP]=\fIvalue\fP \&. .RE Индекс \fIsubscript\fP рассматривается как арифметическое выражение, значение которого должно быть больше или равно нулю. Чтобы явно определить (объявить) индексированный массив, следует использовать .RS \fBdeclare \-a\ \fP\fIname\fP .RE (смотрите .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). .RS \fBdeclare \-a\fP \fIname\fP[\fIsubscript\fP] .RE также принимается; \fIsubscript\fP игнорируется. .PP Ассоциативные массивы создаются с помощью .RS \fBdeclare \-A\ \fP\fIname\fP .RE \&. .PP Атрибуты могут быть заданы для переменной массива с помощью встроенных команд \fB\%declare\fP и \fB\%readonly\fP. Каждый атрибут применяется ко всем элементам массива. .PP Массивы присваиваются с помощью значений вида \fIname\fP=\fB(\fPvalue\fI1\fP \&.\|.\|.\& value\fIn\fP\fB)\fP, где каждое значение \fIvalue\fPможет иметь вид [\fIsubscript\fP]=\fIstring\fP. Для присвоения индексированных массивов не требуется ничего, кроме строки \fIstring\fP. Каждое значение \fIvalue\fP в списке расширяется с помощью расширений оболочки, описанных ниже в разделе .SM \fBРАСШИРЕНИЕ\fP, но значения \fIvalue\fP, которые являются допустимыми значениями переменных, включая скобки и подстрочный индекс, не подвергаются расширению скобок и разделению слов, как для значений отдельных переменных. .PP При присвоении индексов индексированным массивам, если указаны необязательные скобки и нижний индекс, то присваивается этот индекс; в противном случае индекс присваиваемого элемента является последним индексом, плюс единица. Индексация начинается с нуля. .PP При присвоении значений ассоциативному массиву слова в составном присваивании могут быть либо выражениями присваивания, для которых требуется нижний индекс, либо списком слов, который интерпретируется как последовательность чередующихся ключей и значений: \fIname\fP=\fB( \fP\fIkey1 value1 key2 value2\fP .\|.\|.\&\fB)\fP. Они обрабатываются аналогично \fIname\fP=\fB(\fP [\fIkey1\fP]=\fIvalue1\fP [\fIkey2\fP]=\fIvalue2\fP \&.\|.\|.\&\fB)\fP. Первое слово в списке определяет, как будут интерпретироваться остальные слова; все значения в списке должны быть одного типа. При использовании пар ключ/значение ключи не должны отсутствовать или быть пустыми; последнее пропущенное значение обрабатывается как пустая строка. .PP Этот синтаксис также поддерживается встроенной командой \fBdeclare\fP. Отдельные элементы массива могут быть назначены с использованием синтаксиса \fIname\fP[\fIsubscript\fP]=\fIvalue\fP, представленного выше. .PP При присвоении индексов индексированному массиву, если \fIname\fP содержит отрицательное число, то это число интерпретируется как относительное к единице, превышающей максимальный индекс \fIname\fP, поэтому отрицательные индексы отсчитываются от конца массива, а индекс, равный \-1, ссылается на последний элемент массива. .PP Этот .Q += оператор присваивается переменной массива при присваивании с использованием синтаксиса составного присваивания; смотрите раздел .SM \fBПАРАМЕТРЫ\fP выше. .PP Ссылка на элемент массива выполняется с помощью ${\fIname\fP[\fIsubscript\fP]}. Фигурные скобки необходимы, чтобы избежать конфликтов при расширении названия пути. Если \fIsubscript\fP равен \fB@\fP или \fB*\fP, то слово расширяется до всех элементов \fIname\fP, если только это не указано в описании встроенного кода или расширения слова. Эти индексы различаются только в том случае, если слово заключено в двойные кавычки. Если слово заключено в двойные кавычки, то {\fIname\fP[*]} расширяется до одного слова со значением каждого элемента массива, разделенного первым символом специальной переменной .SM \fBIFS\fP, а ${\fIname\fP[@]} расширяет каждый элемент \fIname\fP до отдельного слова. Когда элементов массива нет, ${\fIname\fP[@]} расширяется до нуля. Если расширение в двойных кавычках происходит внутри слова, то расширение первого параметра соединяется с начальной частью расширения исходного слова, а расширение последнего параметра соединяется с последней частью расширения исходного слова. Это аналогично расширению специальных параметров \fB*\fP и \fB@\fP (смотрите подраздел \fBСпециальные параметры\fP выше). .PP ${#\fIname\fP[\fIsubscript\fP]} расширяется до длины ${\fIname\fP[\fIsubscript\fP]}. Если индекс \fIsubscript\fP равен \fB*\fP или \fB@\fP, то расширение равно количеству элементов в массиве. .PP Если значение \fIsubscript\fP, используемое для ссылки на элемент индексированного массива, равно числу, меньшему нуля, то оно интерпретируется относительное к единице, превышающей максимальный индекс массива, поэтому отрицательные индексы отсчитываются от конца массива, а индекс, равный \-1, ссылается на последний элемент. .PP Ссылка на переменную массива без нижнего индекса эквивалентна ссылке на массив с нижним индексом, равным 0. Любая ссылка на переменную с использованием допустимого нижнего индекса является допустимой; \fBbash\fP при необходимости создает массив. .PP Переменная массива считается заданной, если индексу присвоено значение. Строка ноль является допустимым значением. .PP Можно получить ключи (индексы) массива, а также значения. Выражения ${\fB!\fP\fIname\fP[\fI@\fP]} и ${\fB!\fP\fIname\fP[\fI*\fP]} расширяются до индексов, присвоенных переменной массива \fIname\fP. Обработка при использовании двойных кавычек аналогична расширению специальных параметров \fI@\fP и \fI*\fP в двойных кавычках. .PP Встроенная команда \fBunset\fP используется для уничтожения массивов. Команда \fBunset\fP \fIname\fP[\fIsubscript\fP] удаляет элемент массива с индексом \fIsubscript\fP как для индексированных, так и для ассоциативных массивов. Отрицательные индексы индексированных массивов интерпретируются так, как описано выше. Сброс последнего элемента переменной массива не приводит к сбросу значения переменной. Команда \fBunset\fP \fIname\fP, где \fIname\fP приводит к удалению всего массива. Команда \fBunset\fP \fIname\fP[\fIsubscript\fP] ведет себя по\-разному в зависимости от того, является ли \fIname\fP индексированным или ассоциативным массивом, когда \fIsubscript\fP равен \fB*\fP или \fB@\fP. Если \fIname\fP является ассоциативным массивом, то элемент с индексом \fB*\fP или \fB@\fP сбрасывается. Если \fIname\fP является индексированным массивом, то команда unset удаляет все элементы, но не удаляет сам массив. .PP При использовании названия переменной с индексом в качестве аргумента команды, например, с помощью команды \fBunset\fP, без использования синтаксиса расширения слов, описанного выше (например, unset a[4]), аргумент подлежит расширению названия пути. Заключите аргумент в кавычки, если расширение названия пути нежелательно (например, unset \*'a[4]\*'). .PP Встроенные команды \fBdeclare\fP, \fBlocal\fP и \fBreadonly\fP поддерживают опцию \fB\-a\fP для указания индексированного массива и опцию \fB\-A\fP для указания ассоциативного массива. Если указаны обе опции, то приоритет имеет опция \fB\-A\fP. Встроенная команда \fBread\fP поддерживает опцию \fB\-a\fP, чтобы преобразовать список слов, считываемых из стандартного ввода, в массив. Встроенные команды \fBset\fP и \fBdeclare\fP отображают значения массива таким образом, чтобы их можно было повторно использовать в качестве значений. Другие встроенные команды также принимают аргументы типа "array name" (например, \fBmapfile\fP); подробности смотрите в описаниях отдельных встроенных команд ниже. Оболочка предоставляет ряд встроенных переменных массива. .SH РАСШИРЕНИЕ Расширение выполняется в командной строке после того, как оно было разбито на слова. Эти расширения выполняет оболочка: \fIbrace expansion\fP, \fItilde expansion\fP, \fIparameter and variable expansion\fP, \fIcommand substitution\fP, \fIarithmetic expansion\fP, \fIword splitting\fP, \fIpathname expansion\fP и \fIquote removal\fP. .PP Порядок раскрытия следующий: раскрытие фигурными скобками; раскрытие тильдой, раскрытие параметрами и переменными, арифметическое раскрытие и подстановка команд (выполняется слева направо); разделение слов; расширение названия пути; удаление кавычек. .PP В системах, которые могут это поддерживать, доступно дополнительное расширение: подстановка процессов \fIprocess substitution\fP. Это выполняется одновременно с расширением тильды, параметра, переменной, арифметическим расширением и подстановкой команд. .PP Удаление кавычек \fIQuote removal\fP всегда выполняется последним. При этом удаляются символы кавычек, присутствующие в исходном слове, а не те, которые являются результатом какого\-либо другого расширения, если только они сами не были заключены в кавычки. .PP .\" keep leading \& for AT&T troff .\" .BR + \& + \*" doesn't work with AT&T troff Только расширение скобками, разделение слов и расширение названия пути могут увеличить количество слов в расширении; другие расширения расширяют одно слово до одного слова. Единственными исключениями из этого правила являются расширения \fB\&\*"$@\*"\fP и \fB\&\*"${\fP\fIname\fP\fB[@]}\*"\fP\fB\&\fP, а также, в большинстве случаев, \fB$*\fP и \fB${\fP\fIname\fP\fB[*]}\fP, как описано выше (смотрите раздел .SM \fBПАРАМЕТРЫ\fP). .SS "Расширение скобок" Расширение в скобках \fIBrace expansion\fP \- это механизм генерации произвольных строк с общим префиксом и суффиксом, каждый из которых может быть пустым. Этот механизм аналогичен расширению названия пути \fIpathname expansion\fP, но генерируемые названия файлов необязательно должны существовать. Шаблоны, которые будут раскрываться фигурными скобками, формируются из необязательной преамбулы \fIpreamble\fP, за которым следует либо последовательность строк, разделенная запятыми, либо выражение последовательности между парой фигурных скобок, за которым следует необязательный постскриптум \fIpostscript\fP. К каждой строке, заключенной в фигурные скобки, добавляется преамбула, а затем к каждой результирующей строке добавляется постскриптум, расширяющийся слева направо. .PP Раскрытие в фигурных скобках может быть вложенным. Результаты каждой развернутой строки не сортируются; раскрытие в фигурных скобках сохраняет порядок слева направо. Например, a\fB{\fPd,c,b\fB}\fPe расширяется в .Q "ade ace abe" . .PP Выражение последовательности принимает форму \fIx\fP\fB..\fP\fIy\fP\fB[..\fP\fIincr\fP\fB]\fP, где \fIx\fP и \fIy\fP являются либо целыми числами, либо отдельными буквами, а \fIincr\fP, необязательное приращение, равное целому числу. Когда вводятся целые числа, то выражение расширяется до каждого числа от \fIx\fP до \fIy\fP, включительно. Если \fIx\fP или \fIy\fP начинаются с нуля, то каждый созданный член будет содержать одинаковое количество цифр, при необходимости заменяя их нулями. Когда вводятся буквы, то выражение расширяется до каждого символа лексикографически от \fIx\fP до \fIy\fP, включительно, используя локаль C. Обратите внимание, что и \fIx\fP, и \fIy\fP должны быть одного типа (целые или буквенные). При указании приращения оно используется как разница между каждым членом. Приращение по умолчанию равно 1 или \-1, соответственно. .PP Раскрытие скобок выполняется перед любыми другими расширениями, и в результате сохраняются все символы, характерные для других расширений. Это строго текстовое дополнение. Оболочка \fBBash\fP не применяет никакой синтаксической интерпретации к контексту расширения или к тексту между фигурными скобками. .PP Корректно оформленное расширение в виде фигурных скобок должно содержать открывающие и закрывающие скобки без кавычек и, по крайней мере, одну запятую без кавычек или корректное выражение последовательности. Любое неправильно оформленное расширение в виде фигурных скобок останется без изменений. .PP A .Q { или Q , может быть заключено в кавычки с обратной косой чертой, чтобы оно не считалось частью выражения в фигурных скобках. Чтобы избежать конфликтов с расширением параметра .Q ${ например, считается, что в строке скобка не может быть расширена и запрещено расширение скобки до её закрытия .Q } . .PP Эта конструкция обычно используется в качестве сокращения, когда общий префикс генерируемых строк длиннее, чем в приведенном ниже примере: .PP .RS .EX mkdir /usr/local/src/bash/{old,new,dist,bugs} .EE .RE или .RS .EX chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} .EE .RE .PP Расширение фигурной скобки приводит к небольшой несовместимости с предыдущими версиями \fBsh\fP. \fBsh\fP не обрабатывает открывающие или закрывающие фигурные скобки специально, когда они появляются как часть слова, и сохраняет их в выходных данных. \fBBash\fP удаляет фигурные скобки из слов в результате расширения фигурной скобки. Например, слово, введенное в \fBsh\fP как .Q file{1,2} в выходных данных отображается идентично. \fBBash\fP выводит это слово как .Q "file1 file2" после раскрытия фигурной скобки. Запустите \fBbash\fP с помощью опции \fB+B\fP или отключите раскрытие фигурной скобки с помощью опции \fB+B\fP для команды \fBset\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже) для обеспечения строгой совместимости с \fBsh\fP. .SS "Расширение тильды" Если слово начинается с символа тильды без кавычек ( .Q \fB\*~\fP ), все символы, предшествующие первой косой черте без кавычек (или все символы, если косая черта без кавычек отсутствует), считаются префиксом тильды \fItilde\-prefix\fP. Если ни один из символов в префиксе тильды не заключен в кавычки, то символы в префиксе тильды, следующие за тильдой, рассматриваются как возможные названия входа \fIlogin name\fP. Если это имя пользователя является пустой строкой, то тильда заменяется значением параметра оболочки .SM \fBHOME\fP. Если значение .SM \fBHOME\fP не задано, то тильда расширяется до домашнего каталога пользователя, выполняющего оболочку. В противном случае префикс тильды заменяется на домашний каталог, связанный с указанным названием входа. .PP Если префикс тильды является .Q \*~+ , значением переменной оболочки .SM \fBPWD\fP, то он заменяет префикс тильды. Если префикс тильды является .Q \*~\- , оболочка заменяет значение переменной оболочки .SM \fBOLDPWD\fP, если оно задано. Если символы, следующие за тильдой в префиксе тильды, состоят из числа \fIN\fP, необязательно с префиксом a .Q + или .Q \- , префикс тильды заменяется соответствующим элементом из стека каталогов, поскольку он отображался бы при вызове встроенной команды \fBdirs\fP с символами, следующими за тильдой в префиксе тильды, в качестве аргумента. Если символы, следующие за тильдой в префиксе тильды, состоят из числа без начальной буквы .Q + или .Q \- , расширение тильды предполагает .Q + . .PP Результаты расширения тильдой обрабатываются так, как если бы они были заключены в кавычки, поэтому замена не требует разделения слов и расширения пути к ним. .PP Если введено неверное название для входа в оболочку или произошел сбой при расширении тильды, то префикс тильды остается неизменным. .PP \fBBash\fP проверяет каждое присвоение переменной на наличие префиксов тильды без кавычек, следующих непосредственно за \fB:\fP или первым \fB=\fP и выполняет расширение тильды в этих случаях. Следовательно, можно использовать названия файлов с тильдами при присвоении .SM \fBPATH\fP, .SM \fBMAILPATH\fP и .SM \fBCDPATH\fP и оболочка присвоит расширенное значение. .PP \fBBash\fP также выполняет расширение тильдой слов, удовлетворяющих условиям присвоения переменных (как описано выше в разделе .SM \fBПАРАМЕТРЫ\fP), когда они появляются в качестве аргументов для простых команд. \fBBash\fP не выполняет этого, за исключением команд \fIdeclaration\fP , перечисленных выше, в режиме posix. .SS "Расширение параметра" Этот .Q \fB$\fP символ указывает на расширение параметра, замену команды или арифметическое расширение. Название параметра или расширяемый символ могут быть заключены в фигурные скобки, которые необязательны, но служат для защиты расширяемой переменной от следующих непосредственно за ней символов, которые могут быть интерпретированы как часть названия. .PP При использовании фигурных скобок соответствующая конечная фигурная скобка является первой .Q \fB}\fP не экранируется обратной косой чертой или строкой, заключенной в кавычки, и не используется во встроенном арифметическом расширении, замене команд или расширении параметров. .PP Основной формой расширения параметров является .PP ${\fIparameter\fP} .LP который заменяет значение \fIparameter\fP. Фигурные скобки обязательны, если \fIparameter\fP является позиционным параметром, содержащим более одной цифры, или если за \fIparameter\fP следует символ, который не следует интерпретировать как часть его названия. Параметр \fIparameter\fP является параметром оболочки, как описано выше (\fBПАРАМЕТРЫ\fP) или ссылкой на массив (\fBМассивы\fP). .PD .PP Если первый символ \fIparameter\fP является восклицательным знаком (\fB!\fP), а \fIparameter\fP не является \fInameref\fP, то это вводит определенный уровень косвенности. \fBBash\fP использует значение, сформированное путем расширения остальной части \fIparameter\fP, в качестве нового параметра \fIparameter\fP; затем этот новый параметр расширяется, и это значение используется в остальной части расширения, а не в расширении исходного параметра \fIparameter\fP. Это называется косвенным расширением \fIindirect expansion\fP. Значение может быть расширено с помощью тильды, параметра, подстановки команд и арифметического расширения. Если \fIparameter\fP является значением nameref, то оно расширяется до названия параметра, на который ссылается \fIparameter\fP, вместо выполнения полного косвенного расширения для обеспечения совместимости. Исключением из этого правила являются расширения ${\fB!\fP\fIprefix\fP\fB*\fP} и ${\fB!\fP\fIname\fP[\fI@\fP]}, описанные ниже. Восклицательный знак должен стоять непосредственно за левой фигурной скобкой, чтобы ввести косвенность. .PP В каждом из приведенных ниже случаев слово \fIword\fP может быть расширено тильдой, расширено параметром, подменено командой и расширено арифметически. .PP Если не выполняется расширение подстроки, используя описанные ниже формы (например, \fB:\-\fP), \fBbash\fP проверяет наличие параметра, который не задан или равен нулю. Без двоеточия выполняется проверка только для параметра, который не задан. .PP .TP ${\fIparameter\fP\fB:\-\fP\fIword\fP} Использовать значения по умолчанию \fBUse Default Values\fP. Если значение \fIparameter\fP не задано или равно нулю, то оно заменяется расширением слова \fIword\fP. В противном случае подставляется значение \fIparameter\fP. .TP ${\fIparameter\fP\fB:=\fP\fIword\fP} Присвоение значения по умолчанию \fBAssign Default Values\fP. Если значение \fIparameter\fP не задано или равно нулю, расширение слова \fIword\fP присваивается параметру \fIparameter\fP и расширение является окончательным значением параметра \fIparameter\fP. Позиционные параметры и специальные параметры не могут быть назначены таким образом. .TP ${\fIparameter\fP\fB:?\fP\fIword\fP} Ошибка отображения, если значение равно нулю или не задано \fBDisplay Error if Null or Unset\fP. Если параметр \fIparameter\fP равен нулю или не задан, то оболочка записывает расширение слова \fIword\fP (или соответствующее сообщение, если слово \fIword\fP отсутствует) в стандартную ошибку и, если оболочка не является интерактивной, то она завершает работу с ненулевым статусом. Интерактивная оболочка не существует, но она не выполняет команду, связанную с расширением. В противном случае подставляется значение \fIparameter\fP. .TP ${\fIparameter\fP\fB:+\fP\fIword\fP} Использование альтернативного значения \fBUse Alternate Value\fP. Если значение \fIparameter\fP равно нулю или не задано, ничего не заменяется, в противном случае заменяется расширение слова \fIword\fP. Значение \fIparameter\fP не используется. .TP .PD 0 ${\fIparameter\fP\fB:\fP\fIoffset\fP} .TP .PD ${\fIparameter\fP\fB:\fP\fIoffset\fP\fB:\fP\fIlength\fP} Расширение подстроки \fBSubstring Expansion\fP. Расширяется до символов \fIlength\fP значения \fIparameter\fP, начиная с символа, указанного в смещении \fIoffset\fP. Если \fIparameter\fP равен \fB@\fP или \fB*\fP, то индексированный массив, подписанный \fB@\fP или \fB*\fP или ассоциативное название массива, то результаты будут отличаться, как описано ниже. Если значение \fB:\fP\fIlength\fP опущено (первая форма, приведенная выше), то оно расширяется до подстроки значения \fIoffset\fP, начинающегося с символа, указанного в \fIparameter\fP и продолжающегося до конца значения. Если значение \fIoffset\fP опущено, то оно рассматривается как 0. Если значение \fIlength\fP опущено, но двоеточие после \fIoffset\fP присутствует, то оно рассматривается как 0. Значения \fIlength\fP и \fIoffset\fP являются арифметическими выражениями (смотрите раздел .SM \fBАРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ\fP ниже). .IP Если значение \fIoffset\fP равно числу, меньшему нуля, то это значение используется в качестве смещения в символах от конца значения \fIparameter\fP. Если значение длины \fIlength\fP равно числу, меньшему нуля, это интерпретируется как смещение в символах от конца значения \fIparameter\fP, а не на количество символов, а расширением являются символы между \fIoffset\fP и этим результатом. Примечание. Отрицательное смещение должно быть отделено от двоеточия по крайней мере одним пробелом, чтобы его не перепутать с расширением \fB:\-\fP. .IP Если параметр \fIparameter\fP равен \fB@\fP или \fB*\fP, то результатом будет длина \fIlength\fP позиционных параметров, начинающихся со смещения \fIoffset\fP. При отрицательном значении \fIoffset\fP берется значение относительно значения, превышающего наибольший позиционный параметр, поэтому значение смещения, равное \-1, вычисляется как значение последнего позиционного параметра (или 0, если позиционных параметров нет). Это ошибка расширения, если значение \fIlength\fP равно числу, меньшему нуля. .IP Если \fIparameter\fP \- это название индексированного массива, подписанное символом @ или *, то результатом будет \fIlength\fP элементов массива, начинающихся с ${\fIparameter\fP[\fIoffset\fP]}. Значение \fIoffset\fP берется отрицательным относительно значения, на единицу превышающего максимальный индекс указанного массива. Если значение \fIlength\fP меньше нуля, то это является ошибкой расширения. .IP Расширение подстроки, примененное к ассоциативному массиву, приводит к неопределенным результатам. .IP Индексация подстрок выполняется на основе нуля, если не используются позиционные параметры, и в этом случае индексация начинается с 1 по умолчанию. Если значение \fIoffset\fP равно 0 и используются позиционные параметры, то префиксу списка присваивается значение \fB$0\fP. .TP .PD 0 ${\fB!\fP\fIprefix\fP\fB*\fP} .TP ${\fB!\fP\fIprefix\fP\fB@\fP} .PD Названия, соответствующие префиксу \fBNames matching prefix\fP. Расширяется до названий переменных, названия которых начинаются с \fIprefix\fP, отделенных первым символом специальной переменной .SM \fBIFS\fP. Когда используется \fI@\fP и расширение отображается в двойных кавычках, то каждое название переменной расширяется до отдельного слова. .TP .PD 0 ${\fB!\fP\fIname\fP[\fI@\fP]} .TP ${\fB!\fP\fIname\fP[\fI*\fP]} .PD Список ключей массива \fBList of array keys\fP. Если \fIname\fP является переменной массива, то расширяется до списка индексов массива (ключей), назначенных в \fIname\fP. Если \fIname\fP не является массивом, то расширяется до 0, если задано значение \fIname\fP, и ноль в противном случае. Когда используется \fI@\fP и расширение приведено в двойных кавычках, то каждый ключ расширяется до отдельного слова. .TP ${\fB#\fP\fIparameter\fP} Длина параметра \fBParameter length\fP. Заменяет длину в символах расширенного значения параметра \fIparameter\fP. Если \fIparameter\fP равен \fB*\fP или \fB@\fP, то заменяемое значение представляет собой количество позиционных параметров. Если \fIparameter\fP \- это название массива, подписанное символом \fB*\fP или \fB@\fP, то подставляемое значение \- это \- количество элементов в массиве. Если \fIparameter\fP \- это название индексированного массива, подписанное отрицательным числом, то это число интерпретируется как число отнесенное к единице, превышающей максимальный индекс \fIparameter\fP, поэтому отрицательные индексы отсчитываются от конца массива, а индекс, равный \-1, ссылается на последний элемент. .TP .PD 0 ${\fIparameter\fP\fB#\fP\fIword\fP} .TP ${\fIparameter\fP\fB##\fP\fIword\fP} .PD Удаление шаблона совпадающего префикса \fBRemove matching prefix pattern\fP. Слово \fIword\fPрасширяется для получения шаблона, как и при расширении названия пути, и сопоставляется с расширенным значением параметра \fIparameter\fP с использованием правил, описанных в подразделе \fBСопоставление с шаблоном\fP ниже. Если шаблон совпадает с началом значения \fIparameter\fP, то результатом расширения является расширенное значение \fIparameter\fP с кратчайшим совпадающим шаблоном (это .Q # регистр) или удаляется самый длинный совпадающий шаблон (это .Q ## регистр). Если параметр \fIparameter\fP равен \fB@\fP или \fB*\fP, то операция удаления шаблона применяется к каждому позиционному параметру по очереди, и в результате получается расширенный список. Если \fIparameter\fP является переменной массива с индексом \fB@\fP или \fB*\fP, то операция удаления шаблона применяется к каждому элементу массива по очереди, а расширение \- это результирующий список. .TP .PD 0 ${\fIparameter\fP\fB%\fP\fIword\fP} .TP ${\fIparameter\fP\fB%%\fP\fIword\fP} .PD Удаление шаблона совпадающего суффикса \fBRemove matching suffix pattern\fP. Слово \fIword\fP расширяется для получения шаблона точно так же, как при расширении названия пути, и сопоставляется с расширенным значением параметра \fIparameter\fP с использованием правил, описанных в подразделе \fBСопоставление с шаблоном\fP ниже. Если шаблон соответствует конечной части расширенного значения \fIparameter\fP, то результатом расширения является расширенное значение \fIparameter\fP с кратчайшим совпадающим шаблоном (это .Q % регистр) или удаляется самый длинный совпадающий шаблон (это .Q %% регистр). Если параметр \fIparameter\fP равен \fB@\fP или \fB*\fP, то операция удаления шаблона применяется к каждому позиционному параметру по очереди, и в результате получается расширенный список. Если \fIparameter\fP является переменной массива с индексом \fB@\fP или \fB*\fP, то операция удаления шаблона применяется к каждому элементу массива по очереди, а расширение \- это результирующий список. .TP .PD 0 ${\fIparameter\fP\fB/\fP\fIpattern\fP\fB/\fP\fIstring\fP} .TP ${\fIparameter\fP\fB//\fP\fIpattern\fP\fB/\fP\fIstring\fP} .TP ${\fIparameter\fP\fB/#\fP\fIpattern\fP\fB/\fP\fIstring\fP} .TP ${\fIparameter\fP\fB/%\fP\fIpattern\fP\fB/\fP\fIstring\fP} .PD Подстановка шаблона \fBPattern substitution\fP. Шаблон \fIpattern\fP расширяется для получения шаблона и сопоставляется с расширенным значением \fIparameter\fP, как описано в подразделе \fBСопоставление с шаблоном\fP ниже. Самое длинное совпадение с \fIpattern\fP в расширенном значении заменяется на \fIstring\fP. Строка \fIstring\fP подвергается расширению тильдой, расширению параметрами и переменными, арифметическому расширению, замене команд и процессов, а также удалению кавычек. .IP В первой приведенной выше форме заменяется только первое совпадение. Если есть две косые черты, разделяющие параметр \fIparameter\fP и шаблон \fIpattern\fP (вторая приведенная выше форма), то все совпадения \fIpattern\fP заменяются на строку \fIstring\fP. Если шаблону \fIpattern\fPпредшествует \fB#\fP (третья форма выше), то это должно совпадать с началом расширенного значения \fIparameter\fP. Если \fIpattern\fP предшествует \fB%\fP (четвертая форма выше), то это должно совпадать с расширенным значением \fIparameter\fP. .IP Если расширение \fIstring\fP равно нулю, то совпадения с \fIpattern\fP удаляются, а символ \fB/\fP, следующий за \fIpattern\fP, может быть опущен. .IP Если опция оболочки \fBpatsub_replacement\fP включена с помощью \fBshopt\fP, то все экземпляры \fB&\fP без кавычек в строке \fIstring\fP заменяются соответствующей частью \fIpattern\fP. .IP Заключение в кавычки любой части строки \fIstring\fP препятствует замене при расширении заключенной в кавычки части, включая строки для замены, хранящиеся в переменных оболочки. Обратная косая черта заменяет \fB&\fP в \fIstring\fP ; обратная косая черта удаляется, чтобы разрешить использование литерала \fB&\fP в заменяющей строке. Обратная косая черта также может использоваться для экранирования обратной косой черты; \fB\e\e\fP приводит к буквальной обратной косой черте при замене. Пользователи должны быть осторожны, если \fIstring\fP заключена в двойные кавычки, чтобы избежать нежелательного взаимодействия между обратной косой чертой и двойными кавычками, поскольку обратная косая черта имеет особое значение в двойных кавычках. Замена шаблона выполняет проверку на наличие \fB&\fP без кавычек после расширения \fIstring\fP; программисты оболочки должны указывать в кавычках все вхождения \fB&\fP, которые они хотят понимать буквально при замене, и убедиться, что все вхождения \fB&\fP, которые они хотят заменить, не заключены в кавычки. .IP Подобно операторам удаления шаблонов, двойные кавычки, окружающие строку замены, заключают расширенные символы в кавычки, в то время как двойные кавычки, заключающие всю замену параметра, этого не делают, поскольку расширение выполняется в контексте, который не учитывает никакие заключающие двойные кавычки. .IP Если включена опция оболочки \fBnocasematch\fP, то сопоставление выполняется без учета регистра буквенных символов. .IP Если параметр \fIparameter\fP равен \fB@\fP или \fB*\fP, то операция подстановки применяется к каждому позиционному параметру по очереди и в результате получается расширенный список. Если \fIparameter\fP является переменной массива с индексом \fB@\fP или \fB*\fP, то операция подстановки применяется к каждому элементу массива по очереди, а расширение является результирующим списком. .TP .PD 0 ${\fIparameter\fP\fB\*^\fP\fIpattern\fP} .TP ${\fIparameter\fP\fB\*^\*^\fP\fIpattern\fP} .TP ${\fIparameter\fP\fB,\fP\fIpattern\fP} .TP ${\fIparameter\fP\fB,,\fP\fIpattern\fP} .PD Изменение регистра \fBCase modification\fP. Это расширение изменяет регистр буквенных символов в параметре \fIparameter\fP. Сначала шаблон \fIpattern\fP расширяется для создания шаблона, как описано ниже в подразделе .SM \fBСопоставление с шаблоном\fP. Затем \fBBash\fP проверяет символы в расширенном значении \fIparameter\fP на соответствие с \fIpattern\fP, как описано ниже. Если символ соответствует шаблону, то его регистр изменяется. Шаблон не должен пытаться соответствовать более чем одному символу. .IP Используется .Q \*^ для преобразования строчных букв, соответствующих шаблону \fIpattern\fP , в заглавные; .Q , преобразует соответствующие заглавные буквы в строчные. Варианты \fB\*^\fP и \fB,\fP проверяют первый символ в расширенном значении и преобразуют его регистр, если он соответствует шаблону \fIpattern\fP; варианты \fB\*^\*^\fP и \fB,,\fP проверяют все символы в расширенном значении и преобразуют каждый из них, который соответствует \fIpattern\fP. Если \fIpattern\fP опущен, то он обрабатывается как \fB?\fP, который соответствует каждому символу. .IP Если параметр \fIparameter\fP равен \fB@\fP или \fB*\fP, то операция изменения регистра применяется к каждому позиционному параметру по очереди, и в результате получается расширенный список. Если \fIparameter\fP является переменной массива с индексом \fB@\fP или \fB*\fP, то операция изменения регистра применяется к каждому элементу массива по очереди, а расширение является результирующим списком. .TP .PD 0 ${\fIparameter\fP\fB@\fP\fIoperator\fP} Преобразование параметра \fBParameter transformation\fP. Расширение представляет собой либо преобразование значения параметр \fIparameter\fP, либо информации о самом \fIparameter\fP, в зависимости от значения оператора \fIoperator\fP. Каждый \fIoperator\fP состоит из одной буквы: .PP .RS .TP \fBU\fP Расширение представляет собой строку, представляющую собой значение параметра \fIparameter\fP, со строчными буквенными символами, преобразованными в верхний регистр. .TP \fBu\fP Расширение представляет собой строку, представляющую собой значение параметра \fIparameter\fP, причем первый символ преобразуется в верхний регистр, если он алфавитный. .TP \fBL\fP Расширение представляет собой строку, представляющую собой значение параметра \fIparameter\fP, с заглавными буквами, преобразованными в строчные. .TP \fBQ\fP Расширение представляет собой строку, представляющую собой значение \fIparameter\fP, заключенное в кавычки, в формате, который можно повторно использовать в качестве входных данных. .TP \fBE\fP Расширением является строка, представляющая собой значение параметра \fIparameter\fP с расширенными управляющими последовательностями с обратной косой чертой, как при использовании механизма кавычек \fB$\*'\fP.\|.\|.\%\fB\*'\fP. .TP \fBP\fP Расширение представляет собой строку, которая является результатом расширения значения \fIparameter\fP, как если бы это была строка запроса (смотрите раздел \fBПОДСКАЗКА\fP ниже). .TP \fBA\fP Расширение представляет собой строку в виде выражения присваивания или команды \fBdeclare\fP, которая при вычислении воссоздает \fIparameter\fP с его атрибутами и значением. .TP \fBK\fP Выдает, возможно, заключенную в кавычки версию значения \fIparameter\fP, за исключением того, что она выводит значения индексированных и ассоциативных массивов в виде последовательности пар ключ\-значение, заключенных в кавычки (смотрите подраздел \fBМассивы\fP выше). Ключи и значения заключены в кавычки в формате, который можно повторно использовать в качестве входных данных. .TP \fBa\fP Расширение представляет собой строку, состоящую из значений флагов, представляющих атрибуты \fIparameter\fP. .TP \fBk\fP Аналогично преобразованию K, но расширяет ключи и значения индексированных и ассоциативных массивов до отдельных слов после разделения слов. .PD .PP Если \fIparameter\fP равен \fB@\fP или \fB*\fP, то операция применяется к каждому позиционному параметру по очереди и в результате получается расширенный список. Если \fIparameter\fP является переменной массива с индексом \fB@\fP или \fB*\fP, то операция применяется к каждому элементу массива по очереди и результатом расширения является результирующий список. .PP Результат расширения зависит от разделения слов и расширения названия пути, как описано ниже. .RE .SS "Подстановка команд" Подстановка команды \fICommand substitution\fP позволяет при выводе команды заменить саму команду. Существует две стандартные формы: .RS .PP \fB$(\fP\fIcommand\fP\|\fB)\fP .RE или (устарело) .RS \fB\`\fP\fIcommand\fP\fB\`\fP. .RE .PP \fBBash\fP протизводит расширение, выполняя \fIcommand\fP в окружающей среде подоболочки и заменяя подстановку команды стандартным выводом команды, при этом удаляются все завершающие новые строки. Встроенные новые строки не удаляются, но они могут быть удалены при разделении слов. Команда подстановки \fB$(cat \fP\fIfile\fP\fB)\fP может быть заменена эквивалентной, но более быстрой командой \fB$(< \fP\fIfile\fP\fB)\fP. .PP При замене обратной кавычки в старом стиле обратная косая черта сохраняет свое буквальное значение, за исключением тех случаев, когда за ней следует \fB$\fP, \fB\`\fP или \fB\e\fP. Первая обратная кавычка, перед которой не стоит обратная косая черта, завершает замену команды. При использовании формы $(\^\fIcommand\fP\|) все символы, заключенные в круглые скобки, составляют команду; ни один из них не обрабатывается специально. .PP Существует альтернативная форма замены команд: .RS .PP \fB${\fP\fIc\fP \fIcommand\fP\fB;\fP\|\fB}\fP .RE .PP которая выполняет команду \fIcommand\fP в текущей окружающей среде и записывает свои выходные данные, опять же с удалением завершающих новых строк. .PP Символ \fIc\fP, следующий за открывающей фигурной скобкой, должен быть пробелом, знаком табуляции, новой строкой или \fB|\fP, а закрывающая фигурная скобка должна находиться в позиции, в которой может отображаться зарезервированное слово (т.е. перед ним должен стоять символ завершения команды: точка с запятой). \fBBash\fP позволяет соединять закрывающую фигурную скобку с остальными символами без добавления метасимвола оболочки, как это обычно требуется для зарезервированного слова. .PP Любые побочные эффекты \fIcommand\fP вступают в силу немедленно в текущей окружающей среде и сохраняются в текущей среде после завершения выполнения команды (например, встроенная команда \fBexit\fP завершает работу оболочки). .PP Этот тип подстановки команд внешне напоминает выполнение не именованной функции оболочки: локальные переменные создаются так же, как при выполнении функции оболочки, а встроенная команда \fBreturn\fP принудительно завершает выполнение команды \fIcommand\fP; однако остальная окружающая среда, включая позиционные параметры, совместно используется вызывающей стороной. .PP Если первым символом, следующим за открытой фигурной скобкой, является \fB|\fP, то конструкция расширяется до значения переменной команды \fBREPLY\fP после выполнения \fIcommand\fP, без удаления завершающих символов новой строки, а стандартный вывод \fIcommand\fP остается таким же, как и в вызывающей оболочке. \fBBash\fP создает \fBREPLY\fP как изначально не установленную локальную переменную при выполнении \fIcommand\fP и восстанавливает \fBREPLY\fP до значения, которое оно имело до замены команды, после завершение \fIcommand\fP, как и в случае с любой локальной переменной. .PP Замены команд могут быть вложенными. Для вложения при использовании формы с обратными кавычками, закройте внутренние кавычки обратной косой чертой. .PP Если замена выполняется в двойных кавычках, то \fBbash\fP не выполняет разбиение слов и результаты расширения пути. .SS "Арифметическое расширение" Арифметическое расширение вычисляет арифметическое выражение и подставляет результат. Формат арифметического расширения следующий: .RS .PP \fB$((\fP\fIexpression\fP\fB))\fP .RE .PP Это расширение \fIexpression\fP расширяется так же, как если бы оно было заключено в двойные кавычки, но неэкранированные символы двойных кавычек в \fIexpression\fP не обрабатываются специальным образом и удаляются. Все токены в выражении расширяются с помощью параметров и переменных, заменяются командой и удаляются кавычки. Результат обрабатывается как вычисляемое арифметическое выражение. Поскольку способ, которым Bash обрабатывает двойные кавычки, потенциально может привести к появлению пустых строк, арифметическое расширение рассматривает их как выражения, значение которых равно 0. Арифметические расширения могут быть вложенными. .PP Вычисление выполняется в соответствии с правилами, перечисленными ниже в разделе .SM \fBАРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ\fP. Если значение \fIexpression\fP неверно, то \fBbash\fP выводит сообщение о стандартной ошибке и не выполняет подстановку, а также не выполняет команду, связанную с расширением. .SS "Подстановка процесса" Подстановка процесса \fIProcess substitution\fP позволяет ссылаться на входные или выходные данные процесса, используя название файла. Она принимает форму \fB<(\fP\fIlist\^\fP\fB)\fP или \fB>(\fP\fIlist\^\fP\fB)\fP. Процесс список \fIlist\fP выполняется асинхронно, а его входные или выходные данные отображаются в виде названия файла. Это, полученное в результате расширения, название файла передается в качестве аргумента текущей команде. .PP Если используется форма \fB>(\fP\fIlist\^\fP\fB)\fP, то запись в файл обеспечивает ввод данных для \fIlist\fP. Если используется форма \fB<(\fP\fIlist\^\fP\fB)\fP, то при чтении файла выводится \fIlist\fP. Между \fB<\fP или \fB>\fP и левой круглой скобкой не должно быть пробела, иначе конструкция будет интерпретирована как перенаправление. .PP Замена процессов поддерживается в системах, поддерживающих именованные каналы (\fIFIFOs\fP) или метод именования открытых файлов \fI/dev/fd\fP. .PP При наличии возможности подстановка процесса выполняется одновременно с расширением параметров и переменных, подстановкой команд и арифметическим расширением. .SS "Разделение слов" Оболочка проверяет результаты расширения параметров, подстановки команд и арифметического расширения, которые не были заключены в двойные кавычки, на предмет \fIword splitting\fP. Слова, которые не были расширены, не разбиваются. .PP Оболочка обрабатывает каждый символ .SM \fBIFS\fP как разделитель и разбивает результаты других расширений на слова, используя эти символы в качестве разделителей полей. .PP Символ \fIIFS whitespace\fP \- это пробел, определенный выше (смотрите подраздел \fBОпределения\fP), который появляется в значении .SM \fBIFS\fP. Пробел, табуляция и новая строка всегда считаются пробелами, даже если они не входят в категорию пробел \fBspace\fP в локали. .PP Если значение .SM \fBIFS\fP не задано, то разделение поля выполняется так, как если бы его значением было \fB\fP, а эти символы рассматриваются как пробелы IFS. Если значение .SM \fBIFS\fP равно нулю, то разбиение слов не происходит, но неявные нулевые аргументы (см. ниже) все равно удаляются. .PP Разделение слов начинается с удаления последовательностей пробельных символов IFS из начала и конца результатов предыдущих расширений, затем происходит разделение оставшихся слов. .PP Если значение .SM \fBIFS\fP состоит исключительно из пробелов IFS, то любая последовательность символов IFS разделяет поле, поэтому поле состоит из символов, которые не являются пробелами IFS без кавычек, а пустые поля являются результатом только заключения в кавычки. .PP Если .SM \fBIFS\fP содержит символ, не являющийся пробельным, то любой символ в значении .SM \fBIFS\fP, который не является пробельным, вместе с любыми соседними символами IFS, отделяют поле. Это означает, что соседние разделители, отличные от пробелов IFS, создают пустое поле. Последовательность символов пробелов IFS также ограничивает поле. .PP Явные нулевые аргументы (\^\fB\*"\^\*"\fP или \^\fB\*'\^\*'\fP\^) сохраняются и передаются командам в виде пустых строк. Неявные нулевые аргументы без кавычек, возникающие в результате расширения параметров, и не имеющие значений, удаляются. При расширении параметра без значения, заключенного в двойные кавычки, создается поле ноль, которое сохраняется и передается команде в виде пустой строки. .PP Когда аргумент ноль, заключенный в кавычки, появляется как часть слова, расширение которого не равно нулю, то при разделении слов удаляется нулевая часть аргумента, оставляя ненулевое расширение. То есть становится .Q \-d\*'\^\*' словом .Q \-d после разделения слов и удаления нулевого аргумента. .SS "Расширение названия пути" После разделения слов, если не установлена опция \fB\-f\fP, \fBbash\fP проверяет каждое слово на наличие символов \fB*\fP, \fB?\fP и \fB[\fP. Если один из этих символов обнаружен и не заключен в кавычки, то слово рассматривается как шаблон \fIpattern\fP и заменяется отсортированным списком названий файлов, соответствующих шаблону (смотрите подраздел .SM \fBСопоставление с шаблоном\fP ниже), в зависимости от значения переменной оболочки \fBGLOBSORT\fP. .PP Если совпадающие названия файлов не найдены, а опция оболочки \fBnullglob\fP не установлена, то слово остается без изменений. Если опция \fBnullglob\fP установлена, а совпадений не найдено, то слово удаляется. Если задана опция оболочки \fBfailglob\fP и совпадения не найдены, то \fBbash\fP выводит сообщение об ошибке и не выполняет команду. Если включена опция оболочки \fBnocaseglob\fP, то сопоставление выполняется без учета регистра буквенных символов. .PP Когда для расширения названия пути используется шаблон, то символ .Q .\& в начале названия или сразу после него должна быть явно указана косая черта, если только не задана опция оболочки \fBdotglob\fP. Для соответствия названий файлов .FN .\& и .FN ..\& , шаблон должен начинаться .Q .\& (например, .Q .?\& ), даже если задана опция \fBdotglob\fP. Если опция оболочки \fBglobskipdots\fP включена, то названия файлов .FN .\& и .FN ..\& никогда не будут совпадает, даже если шаблон начинается с .Q .\& . Если названия путей не совпадают, то .Q .\& символ не обрабатывается особым образом. .PP При сопоставлении названия пути символ косой черты всегда должен быть явно сопоставлен с косой чертой в шаблоне, но в других контекстах сопоставлений он может быть сопоставлен со специальным символом шаблона, как описано ниже в подразделе .SM \fBСопоставление с шаблоном\fP. .PP Смотрите описание команды \fBshopt\fP ниже в разделе .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP для получения описаний опций оболочки \fBnocaseglob\fP, \fBnullglob\fP, \fBglobskipdots\fP, \fBfailglob\fP и \fBdotglob\fP. .PP Переменная оболочки .SM \fBGLOBIGNORE\fP может использоваться для ограничения набора названий файлов, соответствующих шаблону \fIpattern\fP. Если задано значение .SM \fBGLOBIGNORE\fP, т все совпадающие названия файлов, которые также соответствуют одному из шаблонов в .SM \fBGLOBIGNORE\fP, удаляются из списка совпадений. Если установлена опция \fBnocaseglob\fP, то сопоставление с шаблонами в .SM \fBGLOBIGNORE\fP выполняется без учета регистра. Названия файлов .FN .\& и .FN ..\& всегда игнорируется, если задано не нулевое значение .SM \fBGLOBIGNORE\fP. Однако установка для .SM \fBGLOBIGNORE\fP ненулевого значения приводит к включению опции оболочки \fBdotglob\fP, поэтому все остальные названия файлов, начинающиеся с .Q .\& совпадение. Чтобы вернуть прежнее поведение при игнорировании названий файлов, начинающихся с .Q .\& , создает .Q .* один из шаблонов в .SM \fBGLOBIGNORE\&.\fP Опция \fBdotglob\fP отключена, если параметр .SM \fBGLOBIGNORE\fP не установлен. При сопоставлении с шаблоном \fBGLOBIGNORE\fP учитывается настройка опции оболочки \fBextglob\fP. .PP Значение переменной оболочки .SM \fBGLOBSORT\fP определяет порядок сортировки результатов расширения названия пути, как описано выше в подразделе \fBПеременные оболочки\fP. .PP \fBСопоставление с шаблоном\fP .PP Любой символ, который появляется в шаблоне, за исключением специальных символов шаблона, описанных ниже, соответствует самому себе. Символ NUL может не встречаться в шаблоне. Обратная косая черта заменяет следующий символ; при сопоставлении экранирующая обратная косая черта отбрасывается. Специальные символы шаблона должны быть заключены в кавычки, если они должны быть подобраны буквально. .PP Специальные символы шаблона имеют следующие значения: .PP .PD 0 .RS .TP \fB*\fP Соответствует любой строке, включая нулевую строку. Когда опция оболочки \fBglobstar\fP включена и \fB*\fP используется в контексте расширения названия пути, то два соседних \fB*\fP, используемых в качестве единого шаблона, соответствуют всем файлам и нулю или более каталогам и подкаталогам. Если за ним следует \fB/\fP, то две соседние буквы \fB*\fP соответствуют только каталогам и подкаталогам. .TP \fB?\fP Соответстветствие любому отдельному символу. .TP \fB[\fP.\|.\|.\fB]\fP .PD Соответствует любому из символов, заключенных в квадратные скобки. Это называется выражением в квадратных скобках \fIbracket expression\fP и соответствует одному символу. Пара символов, разделенных дефисом, обозначает выражение диапазона \fIrange expression\fP; любой символ, который находится между этими двумя символами включительно, использует последовательность сопоставлений и набор символов, соответствующих текущей локали. Если первым символом, следующим за \fB[\fP, является \fB!\fP или \fB\*^\fP, то соответствует любой символ, не входящий в диапазон. Чтобы соответствовать \fB\-\fP, включите его в качестве первого или последнего символа в наборе. Чтобы соответствовать символу \fB]\fP, включите его в качестве первого символа в наборе. .IP Порядок сортировки символов в выражениях диапазона и символы, включенные в диапазон, определяются текущей локалью и значениями, если они установлены, переменных оболочки .SM \fBLC_COLLATE\fP или .SM \fBLC_ALL\fP. Чтобы получить традиционную интерпретацию выражений диапазона, где \fB[a\-d]\fP эквивалентно \fB[abcd]\fP, установите значение переменных оболочки \fBLC_COLLATE\fP или \fBLC_ALL\fP равным \fBC\fP или включите опцию оболочки \fBglobasciiranges\fP. .IP В выражении, заключенном в квадратные скобки, классы символов \fIcharacter classes\fP могут быть указаны с использованием синтаксиса \fB[:\fP\fIclass\fP\fB:]\fP, где \fIclass\fP \- это один из следующих классов, определенных в стандарте .SM POSIX .: .IP .RS .B .if n alnum alpha ascii blank cntrl digit graph lower print punct space \ upper word xdigit .if t alnum alpha ascii blank cntrl digit graph lower \ print punct space upper word xdigit .RE .IP Класс символов соответствует любому символу, принадлежащему к этому классу. Класс символов слова \fBword\fP соответствует буквам, цифрам и символу _. .IP В выражении, заключенном в квадратные скобки, класс эквивалентности \fIequivalence class\fP может быть указан с использованием синтаксиса \fB[=\fP\fIc\fP\fB=]\fP, который сопоставляет все символы с тем же значением сортировки (как определено текущей локалью), что и символ \fIc\fP. .IP В выражении, заключенном в квадратные скобки, синтаксис \fB[.\fP\fIsymbol\fP\fB.]\fP соответствует сопоставляющему символу \fIsymbol\fP. .RE .PP Если включена опция оболочки \fBextglob\fP с помощью встроенной команды \fBshopt\fP, то оболочка распознает несколько расширенных операторов сопоставления с шаблоном. В следующем описании список шаблонов \fIpattern\-list\fP \- это список из одного или нескольких шаблонов, разделенных символом \fB|\fP. Составные части могут быть сформированы с использованием одного или нескольких следующих подшаблонов: .PP .PD 0 .RS .TP \fB?(\fP\^\fIpattern\-list\^\fP\fB)\fP Соответствует нулю или одному появлению в заданных шаблонах. .TP \fB*(\fP\^\fIpattern\-list\^\fP\fB)\fP Соответствует нулю или одному появлению в заданных шаблонах. .TP \fB+(\fP\^\fIpattern\-list\^\fP\fB)\fP Соответствует нулю или одному появлению в заданных шаблонах. .TP \fB@(\fP\^\fIpattern\-list\^\fP\fB)\fP Соответствует одному появлению в заданных шаблонах. .TP \fB!(\fP\^\fIpattern\-list\^\fP\fB)\fP Соответствует всему, кроме одного из заданных шаблонов. .RE .PD .PP Опция \fBextglob\fP изменяет поведение синтаксического анализатора, поскольку круглые скобки обычно рассматриваются как операторы с синтаксическим значением. Чтобы обеспечить корректный анализ расширенных шаблонов сопоставления, убедитесь, что \fBextglob\fP включено перед анализом конструкций, содержащих шаблоны, включая функции оболочки и замены команд. .PP При сопоставлении названий файлов опция оболочки \fBdotglob\fP определяет набор проверяемых названий файлов: когда включено \fBdotglob\fP, набор названий файлов включает все файлы, начинающиеся с .Q .\& , but .FN .\& и .FN ..\& должен соответствовать шаблону или вложенному шаблону, начинающемуся с точки; если он отключен, то в набор не включаются названия файлов, начинающиеся с .Q .\& если только шаблон или субшаблон не начинается с .Q .\& . Если опция оболочки \fBglobskipdots\fP включена, то названия файлов .FN .\& и .FN ..\& никогда не появляется в наборе. Как указано выше, .Q .\& имеет особое значение только при совпадениях названий файлов. .PP Сложное расширенное сопоставления с шаблоном с длинными строками выполняется медленно, особенно если шаблоны содержат чередования, а строки содержат множество совпадений. Используйте отдельные совпадения с более короткими строками или используйте массивы строк вместо одной длинной строки. .SS "Удаление кавычки" После предыдущих расширений все не заключенные в кавычки символы \fB\e\fP, \fB\*'\fP и \^\fB\*"\fP, которые не были получены в результате одного из вышеуказанных расширений, будут удалены. .SH ПЕРЕНАПРАВЛЕНИЕ Перед выполнением команды ее ввод и вывод могут быть перенаправлены с использованием специальной нотации, интерпретируемой оболочкой. Перенаправление \fIredirected\fP позволяет дублировать файловые дескрипторы команд, открывать, закрывать их, указывать на разные файлы и изменять файлы, из которых команда считывает и в которые записывает данные. При использовании со встроенной команды \fBexec\fP перенаправления изменяют файловые дескрипторы в текущей среде выполнения оболочки. Следующие операторы перенаправления могут предшествовать или отображаться в любом месте простой команд \fIsimple command\fP или могут следовать за командой \fIcommand\fP. Перенаправления обрабатываются в том порядке, в котором они отображаются, слева направо. .PP Каждому перенаправлению, которому может предшествовать номер файлового дескриптора, вместо этого может предшествовать слово вида название файла \fIvarname\fP. В этом случае для каждого оператора перенаправления, за исключением \fB>&\-\fP и \fB<&\-\fP, оболочка выделяет файловый дескриптор, который больше или равен 10 и присваивает ему значение \fIvarname\fP. Если \fIvarname\fP предшествует \fB>&\-\fP или \fB<&\-\fP, то значение \fIvarname\fP определяет дескриптор файла, который необходимо закрыть.Если указано значение {\fIvarname\fP}, то перенаправление сохраняется за пределами действия команды, что позволяет программисту оболочки вручную управлять временем жизни файлового дескриптора без использования встроенной команды \fBexec\fP. Опция оболочки \fBvarredir_close\fP управляет этим поведением. .PP В следующих описаниях, если номер файлового дескриптора опущен, а первый символ оператора перенаправления равен .Q < , перенаправление ссылается на стандартный ввод (файловый дескриптор 0). Если первый символ оператора перенаправления равен .Q > , перенаправление ссылается на стандартный вывод (файловый дескриптор 1). .PP Слово, \fIword\fPследующее за оператором перенаправления в приведенных ниже описаниях, если не указано иное, может быть расширено фигурными скобками, тильдой, параметрами и переменными, заменой команд, арифметическим расширением, удалением кавычек, расширением названия пути и разделением слов. Если оно расширяется более чем на одно слово, то \fBbash\fP сообщает об ошибке. .PP Порядок перенаправлений имеет значение. Например, команда .RS .PP ls \fB>\fP dirlist 2\fB>&\fP1 .RE .PP перенаправляет как стандартный вывод, так и в стандартную ошибку в файл \fIdirlist\fP, в то время как команда .RS .PP ls 2\fB>&\fP1 \fB>\fP dirlist .RE .PP перенаправляет только стандартный вывод в файл \fIdirlist\fP, поскольку стандартная ошибка была перенаправлена в стандартный вывод до того, как стандартный вывод был перенаправлен в \fIdirlist\fP. .PP \fBBash\fP специально обрабатывает несколько названий файлов, когда они используются в перенаправлениях, как описано в следующей таблице. Если операционная система, на которой запущена \fBbash\fP, предоставляет эти специальные файлы, то \fBbash\fP использует их; в противном случае она эмулирует их внутренне с помощью поведения, описанного ниже. .RS .PP .PD 0 .TP \fB/dev/fd/\fP\fIfd\fP Если \fIfd\fP является допустимым целым числом, то дублировать файловый дескриптор \fIfd\fP. .TP \fB/dev/stdin\fP Файловый дескриптор 0 дублируется. .TP \fB/dev/stdout\fP Файловый дескриптор 1 дублируется. .TP \fB/dev/stderr\fP Файловый дескриптор 2 дублируется. .TP \fB/dev/tcp/\fP\fIhost\fP\fB/\fP\fIport\fP Если \fIhost\fP \- допустимое название хоста или адрес интернет, а \fIport\fP \- целочисленный номер порта или название службы, то \fBbash\fP попытается открыть соответствующий сокет TCP. .TP \fB/dev/udp/\fP\fIhost\fP\fB/\fP\fIport\fP Если \fIhost\fP \- допустимое название хоста или адрес интернет, а \fIport\fP \- целочисленный номер порта или название службы, то \fBbash\fP попытается открыть соответствующий сокет UDP. .PD .RE .PP Сбой при открытии или создании файла приводит к сбою перенаправления. .PP Перенаправления с использованием файловых дескрипторов, превышающих 9, следует используйте с осторожностью, так как они могут конфликтовать с файловыми дескрипторами, используемыми оболочкой внутри системы. .SS "Перенаправление ввода" При перенаправлении ввода открывается файл, название которого является результатом расширения слова \fIword\fP для чтения по файловому дескриптору \fIn\fP или стандартный ввод (файловый дескриптор 0), если \fIn\fP не указано. .PP Общий формат для перенаправления входных данных следующий: .RS .PP [\fIn\fP]\fB<\fP\fIword\fP .RE .SS "Перенаправление вывода" При перенаправлении выходных данных открывается файл, название которого является результатом расширения слова \fIword\fP для записи в файловом дескрипторе \fIn\fP или стандартный вывод (файловый дескриптор 1), если \fIn\fP не указано. Если файл не существует, то он создается; если он существует, то он обрезается до нулевого размера. .PP Общий формат для перенаправления выходных данных следующий: .RS .PP [\fIn\fP]\fB>\fP\fIword\fP .RE .PP Если оператором перенаправления является \fB>\fP и включена опция \fBnoclobber\fP для встроенной команды \fBset\fP, то перенаправление завершается ошибкой, если файл, название которого является результатом расширения слова \fIword\fP, существует и является обычным файлом. Если оператором перенаправления является \fB>|\fP или оператором перенаправления является \fB>\fP, а опция \fBnoclobber\fP для встроенной команды \fBset\fP не включена, то \fBbash\fP попытается перенаправить, даже если файл, названный \fIword\fP существует. .SS "Добавление перенаправленных выходных данных" При перенаправлении вывода таким образом открывается файл, название которого является результатом расширения слова \fIword\fP для добавления к файловому дескриптору \fIn\fP, или стандартный вывод (файловый дескриптор 1), если \fIn\fP не указано. Если файл не существует, то он создается. .PP Общий формат для добавления выходных данных следующий: .RS .PP [\fIn\fP]\fB>>\fP\fIword\fP .RE .SS "Перенаправление стандартного вывода и стандартной ошибки" Эта конструкция перенаправляет как стандартный вывод (файловый дескриптор 1), так и стандартный вывод об ошибке (файловый дескриптор 2) в файл, название которого является расширением слова \fIword\fP. .PP Существует два формата для перенаправления стандартного вывода и стандартной ошибки: .RS .PP \fB&>\fP\fIword\fP .RE и .RS \fB>&\fP\fIword\fP .RE .PP Из двух форматов предпочтительнее первый. Семантически это эквивалентно .RS .PP \fB>\fP\fIword\fP 2\fB>&\fP1 .RE .PP При использовании второго формата слово \fIword\fP может не расширяться до числа или \fB\-\fP. Если это так, то, по соображениям совместимости, применяются другие операторы перенаправления (смотрите подраздел \fBДублирование файловых дескрипторов\fP ниже). .SS "Добавление стандартного вывода и стандартной ошибки" Эта конструкция добавляет как стандартный вывод (файловый дескриптор 1), так и стандартный вывод об ошибке (файловый дескриптор 2) к файлу, название которого является расширением слова \fIword\fP. .PP Формат для добавления стандартного вывода и стандартной ошибки следующий: .RS .PP \fB&>>\fP\fIword\fP .RE .PP Это семантически эквивалентно .RS .PP \fB>>\fP\fIword\fP 2\fB>&\fP1 .RE .PP (смотрите подраздел \fBДублирование файловых дескрипторов\fP ниже). .SS "Здесь документы" Перенаправление "Здесь документы" (Here Documents) предписывает оболочке считывать входные данные из текущего источника до тех пор, пока она не прочитает строку, содержащую только разделитель \fIdelimiter\fP (без завершающих пробелов). Все строки, прочитанные до этого момента, затем становятся стандартными входными данными (или файловым дескриптором \fIn\fP, если указано \fIn\fP) для команды. .PP Формат документов here\-documents следующий: .RS .PP .nf [\fIn\fP]\fB<<\fP[\fB\-\fP]\fIword\fP \fIhere\-document\fP \fIdelimiter\fP .fi .RE .PP Оболочка не выполняет расширение параметров и переменных, подстановку команд, арифметическое расширение или расширение названия пути для слова \fIword\fP. .PP Если какая\-либо часть слова \fIword\fP заключена в кавычки, то разделитель \fIdelimiter\fP является результатом удаления кавычек в слове \fIword\fP и строки в документе here\-document не расширяются. Если \fIword\fP не заключено в кавычки, то \fIdelimiter\fP \- это само слово \fIword\fP и текст документа here\-document обрабатывается аналогично строке, заключенной в двойные кавычки: все строки документа here\-document подвергаются расширению параметров, замене командами и арифметическому расширению, последовательность символов \fB\e\fP трактуется буквально, а \fB\e\fP необходимо использовать для заключения в кавычки символов \fB\e\fP, \fB$\fP и \fB\`\fP; однако символы двойных кавычек не имеют специального значения. .PP Если оператором перенаправления является \fB<<\-\fP, то оболочка удаляет все начальные символы табуляции из строк ввода и строки, содержащей \fIdelimiter\fP. Это позволяет естественным образом использовать отступы в текстовых документах в сценариях оболочки. .PP Если разделитель не заключен в кавычки, то последовательность \fB\e\fP рассматривается как продолжение строки: две строки соединяются, а обратная косая черта\-новая строка удаляется. Это происходит при чтении документа here\-document, перед проверкой наличия конечного разделителя, поэтому соединенные строки могут образовывать конечный разделитель. .SS "Здесь строки" Вариант документов "Здесь строки" (Here Strings) имеет следующий формат: .RS .PP .nf [\fIn\fP]\fB<<<\fP\fIword\fP .fi .RE .PP Слово \fIword\fP расширяется с помощью тильды, параметров и переменных, подстановки команд, арифметического расширения и удаления кавычек. Расширение названия пути и разделение слов не выполняются. Результат передается в виде отдельной строки с добавлением новой строки к команде при ее стандартном вводе (или файловому дескриптору \fIn\fP, если указано \fIn\fP). .SS "Дублирование файловых дескрипторов" Оператор перенаправления .RS .PP [\fIn\fP]\fB<&\fP\fIword\fP .RE .PP используется для дублирования входных файловых дескрипторов. Если слово \fIword\fP расширяется до одной или нескольких цифр, то файловый дескриптор \fIn\fP становится копией этого файлового дескриптора. Ошибка перенаправления возникает, если цифры в \fIword\fP не указывают на файловый дескриптор, открытый для ввода. Если значение \fIword\fP равно \fB\-\fP, то файловый дескриптор \fIn\fP закрыт. Если \fIn\fP не указано, то используется стандартный ввод (файловый дескриптор 0). .PP Оператор перенаправления .RS .PP [\fIn\fP]\fB>&\fP\fIword\fP .RE .PP используется аналогично для дублирования выходных файловых дескрипторов. Если \fIn\fP не указано, то используется стандартный вывод (файловый дескриптор 1). Если цифры в \fIword\fP не указывают файловый дескриптор, открытый для вывода, то это означает ошибку перенаправления. Если значение \fIword\fP равно \fB\-\fP, то файловый дескриптор \fIn\fP закрывается. В качестве особого случая, если \fIn\fP опущено, а \fIword\fP не расширяется до одной или нескольких цифр или \fB\-\fP, это перенаправляет стандартный вывод и стандартную ошибку, как описано ранее. .SS "Перемещение файловых дескрипторов" Оператор перенаправления .RS .PP [\fIn\fP]\fB<&\fP\fIdigit\fP\fB\-\fP .RE .PP перемещает файловый дескриптор со значением \fIdigit\fP в файловый дескриптор со значением \fIn\fP или в стандартный ввод (файловый дескриптор 0), если \fIn\fP не указано. Дескриптор со значением \fIdigit\fP закрывается после дублирования в \fIn\fP. .PP Аналогично, оператор перенаправления .RS .PP [\fIn\fP]\fB>&\fP\fIdigit\fP\fB\-\fP .RE .PP перемещает файловый дескриптор со значением \fIdigit\fP в файловый дескриптор со значением \fIn\fP или в стандартный вывод (файловый дескриптор 1), если \fIn\fP не указано. .SS "Открытие файловых дескрипторов для чтения и записи" Оператор перенаправления .RS .PP [\fIn\fP]\fB<>\fP\fIword\fP .RE .PP открывает файл, название которого является расширением слова \fIword\fP, как для чтения, так и для записи по файловому дескриптору \fIn\fP или по файловому дескриптору 0, если \fIn\fP не указано. Если файл не существует, то он создается. .SH ПСЕВДОНИМЫ Псевдонимы \fIAliases\fP позволяют подставлять строку вместо слова, которое находится в позиции во входных данных, где оно может быть первым словом простой команды. Псевдонимы имеют названия и соответствующие значения, которые устанавливаются и отменяются с помощью встроенных команд \fBalias\fP и \fBunalias\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). .PP Если оболочка считывает слово без кавычек в правильной позиции, то она проверяет, соответствует ли оно псевдониму. Если оно соответствует, то оболочка заменяет слово значением псевдонима и считывает это значение, как если бы оно было прочитано вместо слова. Оболочка не просматривает символы, следующие за словом, перед попыткой замены псевдонима. .PP Символы \fB/\fP, \fB$\fP, \fB\`\fP и \fB=\fP, а также любые из перечисленных выше метасимволов \fImetacharacters\fP оболочки или кавычек могут отсутствовать в псевдониме. Заменяющий текст может содержать любые допустимые входные данные оболочки, включая метасимволы оболочки. Первое слово заменяющего текста проверяется на наличие псевдонимов, но слово, идентичное раскрываемому псевдониму, не раскрывается во второй раз. Это означает, что можно, например, заменить \fBls\fP на \fBls \-F\fP и \fBbash\fP не будет пытаться рекурсивно расширять заменяющий текст. .PP Если последним символом значения псевдонима является пробел \fIblank\fP, то оболочка проверяет следующее за псевдонимом командное слово на предмет расширения псевдонима. .PP Псевдонимы создаются и выводятся с помощью команды \fBalias\fP, а удаляются с помощью команды \fBunalias\fP. .PP В заменяющем тексте нет механизма для использования аргументов. Если аргументы необходимы, то используйте функцию оболочки (смотрите раздел .SM \fBФУНКЦИИ\fP ниже). .PP Псевдонимы не раскрываются, когда оболочка не является интерактивной, если только опция оболочки \fBexpand_aliases\fP не задана с помощью команды \fBshopt\fP (смотрите описание \fBshopt\fP в разделе .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). .PP Правила, касающиеся определения и использования псевдонимов, несколько запутанны. \fBBash\fP всегда считывает по крайней мере одну полную строку ввода и все строки, которые составляют составную команду, перед выполнением любой из команд в этой строке или составной команды. Псевдонимы раскрываются при чтении команды, а не при ее выполнении. Следовательно, определение псевдонима, появляющееся в той же строке, как и другая команда, и не вступит в силу до тех пор, пока оболочка не прочитает следующую строку ввода, а определение псевдонима в составной команде не вступит в силу до тех пор, пока оболочка не проанализирует и не выполнит всю составную команду целиком. Новый псевдоним не влияет на команды, следующие за определением псевдонима в этой строке или в остальной части составной команды. Такое поведение также является проблемой при выполнении функций. Псевдонимы раскрываются при чтении определения функции, а не при выполнении функции, поскольку определение функции само по себе является командой. Как следствие, псевдонимы, определенные в функции, недоступны до тех пор, пока эта функция не будет выполнена. На всякий случай всегда выносите определения псевдонимов в отдельную строку и не используйте псевдоним \fBalias\fP в составных командах. .PP Почти для всех целей функции оболочки предпочтительнее псевдонимов. .SH ФУНКЦИИ Функция оболочки, определенная, как описано выше, в разделе .SM \fBГРАММАТИКА ОБОЛОЧКИ\fP, хранит последовательность команд для последующего выполнения. Когда название функции оболочки используется в качестве простого названия команды, тогда оболочка выполняет список команд, связанных с этим названием функции. Функции выполняются в контексте вызывающей оболочки; для их интерпретации не создается новый процесс (сравните это с выполнением сценария оболочки). .PP Когда функция выполняется, аргументы функции становятся позиционными параметрами во время ее выполнения. Специальный параметр \fB#\fP обновляется, чтобы отразить новые позиционные параметры. Специальный параметр \fB0\fP остается неизменным. Первому элементу переменной .SM \fBFUNCNAME\fP присваивается значение названия функции во время ее выполнения. .PP Все остальные аспекты окружающей среды выполнения оболочки идентичны для функции и её вызова, со следующими исключениями: ловушки .SM \fBDEBUG\fP и \fBRETURN\fP не наследуются (смотрите описание встроенной ловушки в разделе .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже), если функции не присвоен атрибут \fBtrace\fP (смотрите описание встроенной команды .SM \fBdeclare\fP ниже) или, если не включена опция оболочки \fB\-o functrace\fP с помощью встроенной команды \fBset\fP (в этом случае все функции наследуют ловушки \fBDEBUG\fP и \fBRETURN\fP), но ловушка .SM \fBERR\fP не наследуется, если не включена опция оболочки \fB\-o errtrace\fP. .PP Переменные, локальные для функции, объявляются с помощью встроенной команды \fBlocal\fP (локальные переменные \fIlocal variables\fP). Обычно переменные и их значения совместно используются функцией и её вызовом. Если переменная \fBlocal\fP объявлена как локальная, то область видимости переменной ограничивается этой функцией и ее дочерними процессами (включая функции, которые она вызывает). .PP В следующем описании текущая область \fIcurrent scope\fP \- это выполняемая в данный момент функция. Предыдущие области состоят из вызывающего объекта этой функции и так далее, вплоть до .Q global область видимости, в которой оболочка не выполняет никаких функций оболочки. Локальная переменная в текущей области видимости \- это переменная, объявленная с использованием встроенных команд \fBlocal\fP или \fBdeclare\fP в выполняемой в данный момент функции. .PP Локальные переменные .Q shadow это переменные с одинаковыми названиями, объявленные в предыдущих областях. Например, локальная переменная, объявленная в функции, скрывает переменные с одинаковыми названиями, объявленные в предыдущих областях, включая глобальные переменные: ссылки и присвоения ссылаются на локальную переменную, оставляя переменные в предыдущих областях неизмененными. Когда функция возвращается, глобальная переменная снова становится видимой. .PP Оболочка использует динамическую область видимости \fIdynamic scoping\fP для управления видимостью переменной в функциях. При динамической области видимости видимые переменные и их значения являются результатом последовательности вызовов функций, которые привели к выполнению текущей функции. Значение переменной, которое видит функция, зависит от ее значения в вызывающем объекте, если таковое имеется, независимо от того, является ли вызывающий объект глобальной областью видимости или другой функцией оболочки. Это также значение, которое скрывается в объявлении локальной переменной и значение, которое восстанавливается при возврате функции. .PP Например, если переменная \fIvar\fP объявлена как локальная в функции \fIfunc1\fP, а \fIfunc1\fP вызывает другую функцию \fIfunc2\fP, то ссылки на \fIvar\fP, сделанные из \fIfunc2\fP, преобразуются в локальную переменную \fIvar\fP из \fIfunc1\fP, заменяющую любую глобальную переменную с названием \fIvar\fP. .PP Встроенная команда \fBunset\fP также работает с использованием той же динамической области: если переменная является локальной для текущей области, то \fBunset\fP сбрасывает ее; в противном случае команда unset будет ссылаться на переменную, найденную в любой вызывающей области, как описано выше. Если переменная в текущей локальной области не установлена, то она остается неизменной (отображается как unset) до тех пор, пока она не будет сброшена в этой области или пока функция не вернется. Как только функция вернется, любой экземпляр переменной в предыдущей области становится видимым. Если unset воздействует на переменную в предыдущей области видимости, то любой экземпляр переменной с таким названием, который был скрыт, становится видимым (смотрите ниже, как опция оболочки \fBlocalvar_unset\fP изменяет это поведение). .PP Переменная .SM \fBFUNCNEST\fP, если для нее задано числовое значение, превышающее 0, определяет максимальный уровень вложенности функции. Вызовы функций, превышающие этот предел, приводят к прерыванию выполнения всей команды. .PP Если в функции выполняется встроенная команда \fBreturn\fP, то функция завершает работу и выполнение возобновляется следующей командой после вызова функции. Если в \fBreturn\fP задан числовой аргумент, то это \- статус возврата функции; в противном случае статус возврата функции это \- статус завершения последней команды, выполненной перед \fBreturn\fP. Любая команда, связанная с ловушкой \fBRETURN\fP, выполняется до продолжения выполнения. Когда функция завершается, значения позиционных параметров и специального параметра \fB#\fP возвращаются к значениям, которые они имели до выполнения функции. .PP Опция \fB\-f\fP для встроенных команд \fBdeclare\fP или \fBtypeset\fP содержит список названий и определений функций. При выборе опции \fB\-F\fP для \fBdeclare\fP или \fBtypeset\fP перечисляются только названия функций (и, при необходимости, исходный файл и номер строки, если включена опция оболочки \fBextdebug\fP). Функции могут быть экспортированы таким образом, чтобы дочерние процессы оболочки (т.е. те, которые создаются при выполнении отдельного вызова оболочки) автоматически определяли их с помощью опции \fB\-f\fP для встроенной функции \fBexport\fP. Опция \fB\-f\fP для встроенной команды \fBunset\fP удаляет определение функции. .PP Функции могут быть рекурсивными. Переменная \fBFUNCNEST\fP может использоваться для ограничения глубины стека вызовов функций и количества вызовов функций. По умолчанию \fBbash\fP не накладывает ограничений на количество рекурсивных вызовов. .SH "АРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ" Оболочка позволяет вычислять арифметические выражения при определенных обстоятельствах (смотрите подраздел Встроенные команды \fBlet\fP и \fBdeclare\fP, составную команду \fB((\fP, арифметическую команду \fBfor\fP, условную команду \fB[[\fP и подраздел \fBАрифметическое расширение\fP). .PP Вычисление выполняется с использованием максимально возможных целых чисел фиксированной длины, без проверки на переполнение, хотя деление на 0 перехватывается и помечается как ошибка. Операторы, их приоритет, ассоциативность и значения такие же, как в языке Си. Следующий список операторов сгруппирован по уровням с одинаковым приоритетом. Уровни перечислены в порядке убывания приоритета. .PP .PD 0 .TP \fIid\fP\fB++ \fP\fIid\fP\fB\-\-\fP переменные значения инкремент и декремент .TP \fB++\fP\fIid\fP\fB \-\-\fP\fIid\fP переменный прединкремент и преддекремент .TP \fB\- +\fP унарный минус и плюс .TP \fB! \*~\fP логическая и побитовая инверсия .TP \fB**\fP возведение в степень .TP \fB* / %\fP умножение, деление, остаток .TP \fB+ \-\fP сложение, вычитание .TP \fB<< >>\fP побитовые сдвиги влево и вправо .TP \fB<= >= < >\fP сравнение .TP \fB== !=\fP равенство и неравенство .TP \fB&\fP побитовое логическое И .TP \fB\*^\fP побитовое логическое исключающее ИЛИ .TP \fB|\fP побитовое логическое ИЛИ .TP \fB&&\fP логическое И .TP \fB||\fP логическое ИЛИ .TP \fIexpr\fP\fB?\fP\fIexpr\fP\fB:\fP\fIexpr\fP оператор ветвления (условие) .TP \fB= *= /= %= += \-= <<= >>= &= \*^= |=\fP назначение, распределение .TP \fIexpr1\fP\fB , \fP\fIexpr2\fP запятая .PD .PP Переменные оболочки допустимы в качестве операндов; расширение параметров выполняется до вычисления выражения. Внутри выражения на переменные оболочки также можно ссылаться по названию, не используя синтаксис расширения параметров. Это означает, что вы можете использовать "x", где \fIx\fP \- это название переменной оболочки, в арифметическом выражении и оболочка вычислит ее значение как выражение и использует результат. Переменная оболочки, которая имеет значение нуль или не определена, принимает значение 0, если на нее ссылается название в выражении. .PP Значение переменной вычисляется как арифметическое выражение, когда на нее ссылаются или когда переменной, которой присвоен атрибут целое число \fIinteger\fP с помощью команды \fBdeclare \-i\fP в качестве значения. Значение ноль (null) равно 0. Для использования в выражении переменной оболочки необязательно, чтобы ее атрибут \fIinteger\fP был включен. .PP Целочисленные константы соответствуют определению языка Си, без суффиксов или символьных констант. Константы, начинающиеся с 0, интерпретируются как восьмеричные числа. 0x или 0XX обозначают шестнадцатеричные числа. В противном случае числа принимают форму [\fIbase#\fP]n, где необязательное \fIbase\fP \- это десятичное число от 2 до 64, представляющее арифметическое основание системы счисления, а \fIn\fP \- значение основания системы счисления. Если основание \fIbase#\fP опущено, то используется основание 10. При указании \fIn\fP, если не требуется указывать цифру, цифры больше 9 обозначаются строчными буквами, прописными буквами @ и _ в указанном порядке. Если значение \fIbase\fP меньше или равно 36, то строчные и прописные буквы могут использоваться взаимозаменяемо для обозначения чисел от 10 до 35. .PP Операторы вычисляются в порядке приоритета. Подвыражения в круглых скобках вычисляются первыми и могут переопределять правила приоритета, приведенные выше. .SH "УСЛОВНЫЕ ВЫРАЖЕНИЯ" Условные выражения используются составной командой \fB[[\fP и встроенными командами \fBtest\fP и \fB[\fP для проверки атрибутов файла и выполнения строковых и арифметических сравнений. Команды \fBtest\fP и \fB[\fP определяют свое поведение на основе количества аргументов; смотрите описания этих команд для любых других действий, связанных с командами. .PP Выражения формируются из унарных или двоичных первичных элементов, перечисленных ниже. Унарные выражения часто используются для проверки состояния файла или переменной оболочки. Бинарные операторы используются для сравнения строк, чисел и атрибутов файлов. .PP \fBBash\fP специально обрабатывает несколько названий файлов, когда они используются в выражениях. Если операционная система, на которой запущена \fBbash\fP, предоставляет эти специальные файлы, то bash будет использовать их; в противном случае она будет эмулировать их внутренне следующим образом: Если какой\-либо аргумент файла \fIfile\fP для одного из основных параметров имеет вид .FN /dev/fd/n , затем \fBbash\fP проверяет файловый дескриптор \fIn\fP. Если аргумент \fIfile\fP для одного из основных параметров является одним из .FN /dev/stdin , .FN /dev/stdout , или .FN /dev/stderr , \fBbash\fP проверяет файловый дескриптор 0, 1 или 2 соответственно. .PP Если не указано иное, то в первую очередь обрабатываются файлы символических ссылок , при этом обрабатываются адресат ссылки, а не сама ссылка. .PP При использовании с \fB[[\fP или когда оболочка находится в режиме posix, операторы \fB<\fP и \fB>\fP выполняют лексикографическую сортировку с использованием текущей локали. Когда оболочка не находится в режиме posix, команда \fBtest\fP выполняет сортировку с использованием порядка ASCII. .PP .PD 0 .TP \fB\-a \fP\fIfile\fP Истинно, если файл \fIfile\fP существует. .TP \fB\-b \fP\fIfile\fP Истинно, если \fIfile\fP существует и является блочным специальным файлом. .TP \fB\-c \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и является специальным символическим файлом. .TP \fB\-d \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и является каталогом. .TP \fB\-e \fP\fIfile\fP Истинно, если файл \fIfile\fP существует. .TP \fB\-f \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и является обычным файлом. .TP \fB\-g \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и имеет значение set\-group\-id. .TP \fB\-h \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и является символической ссылкой. .TP \fB\-k \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и его .Q sticky бит установлен. .TP \fB\-p \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и является именованным каналом (FIFO). .TP \fB\-r \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и доступен для чтения. .TP \fB\-s \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и имеет размер больше нуля. .TP \fB\-t \fP\fIfd\fP Истинно, если файловый дескриптор \fIfd\fP открыт и ссылается на терминал. .TP \fB\-u \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и установлен его бит set\-user\-id. .TP \fB\-w \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и доступен для записи. .TP \fB\-x \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и является исполняемым. .TP \fB\-G \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и имеет эффективный идентификатор группы. .TP \fB\-L \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и является символической ссылкой. .TP \fB\-N \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и был изменен с момента последнего обращения к нему. .TP \fB\-O \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и имеет эффективный идентификатор пользователя. .TP \fB\-S \fP\fIfile\fP Истинно, если файл \fIfile\fP существует и является сокетом. .TP \fB\-o \fP\fIoptname\fP Истинно, если включена опция оболочки \fIoptname\fP. Смотрите список опций в описании опции \fB\-o\fP для встроенной команды \fBset\fP ниже. .TP \fB\-v \fP\fIvarname\fP Истинно (true), если задана переменная оболочки \fIvarname\fP (ей присвоено значение). Если \fIvarname\fP \- это название переменной индексированного массива с подписью \fI@\fP или \fI*\fP, то возвращается значение true, если в массиве есть какие\-либо заданные элементы. Если \fIvarname\fP \- это название переменной ассоциативного массива с подписью \fI@\fP или \fI*\fP, то возвращается значение true, если задан элемент с таким ключом. .TP \fB\-R \fP\fIvarname\fP Истинно, если установлена переменная оболочки \fIvarname\fP, которая является ссылкой на название. .TP \fB\-z \fP\fIstring\fP Истинно, если длина строки \fIstring\fP равна нулю. .TP \fIstring\fP .TP \fB\-n \fP\fIstring\fP Истинно, если длина \fIstring\fP отлична от нуля. .PD .TP \fIstring1\fP \fB==\fP \fIstring2\fP .PD 0 .TP \fIstring1\fP \fB=\fP \fIstring2\fP Истинно (true), если строки равны. \fB=\fP следует использовать с командой \fBtest\fP для проверки соответствия .SM POSIX . При использовании с командой \fB[[\fP выполняется сопоставление с шаблоном, как описано выше (подраздел \fBСоставные команды\fP). .TP \fIstring1\fP \fB!=\fP \fIstring2\fP Истинно, если строки не равны. .TP \fIstring1\fP \fB<\fP \fIstring2\fP Истинно, если строка \fIstring1\fP лексикографически сортируется перед строкой \fIstring2\fP. .TP \fIstring1\fP \fB>\fP \fIstring2\fP Истинно, если строка \fIstring1\fP сортируется лексикографически после строки \fIstring2\fP. .PD .TP .PD 0 \fIfile1\fP \fB\-ef\fP \fIfile2\fP Истинно, если файлы \fIfile1\fP и \fIfile2\fP ссылаются на одно и то же устройство и инод. .TP \fIfile1\fP \-\fBnt\fP \fIfile2\fP Истинно, если файл \fIfile1\fP более новый (в соответствии с датой изменения), чем файл \fIfile2\fP или если файл \fIfile1\fP существует, а файл \fIfile2\fP не существует. .TP \fIfile1\fP \-\fBot\fP \fIfile2\fP Истинно, если файл \fIfile1\fP старше, чем файл \fIfile2\fP или если файл \fIfile2\fP существует, а файл \fIfile1\fP не существует. .PD .TP \fIarg1 \fP\fBOP\fP\fI arg2\fP .SM \fBOP\fP является одним из \fB\-eq\fP, \fB\-ne\fP, \fB\-lt\fP, \fB\-le\fP, \fB\-gt\fP или \fB\-ge\fP. Эти арифметические двоичные операторы возвращают значение true, если значение \fIarg1\fP равно, не равно, меньше, меньше или равно, больше или больше, чем значение \fIarg2\fP, соответственно. \fIarg1\fP и \fIarg2\fP могут быть положительными или отрицательными целыми числами. При использовании с командой \fB[[\fP \fIarg1\fP и \fIarg2\fP вычисляются как арифметические выражения (смотрите раздел .SM \fBАРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ\fP выше). Поскольку расширения, выполняемые командой \fB[[\fP для \fIarg1\fP и \fIarg2\fP, потенциально могут привести к пустым строкам, вычисление арифметических выражений обрабатывает их как выражения, значение которых равно 0. .PD .SH "ПРОСТОЕ РАСШИРЕНИЕ КОМАНДЫ" Когда оболочка выполняет простую команду, она выполняет следующие расширения, назначения и перенаправления слева направо в следующем порядке. .IP 1. Слова, которые синтаксический анализатор пометил как присвоения переменным (т.е. то, что предшествуют названию команды) и перенаправления, сохраняются для последующей обработки. .IP 2. Слова, которые не являются назначениями переменных или перенаправлениями, раскрываются. Если после расширения остаются какие\-либо слова, то первое слово принимается за название команды, а остальные слова \- за аргументы. .IP 3. Перенаправления выполняются так, как описано выше, в разделе .SM \fBПЕРЕНАПРАВЛЕНИЕ\fP. .IP 4. Текст после символа \fB=\fP в каждом присвоении переменной подвергается расширению тильдой, расширению параметров, подстановке команд, арифметическому расширению и удалению кавычек, прежде чем быть присвоенным переменной. .PP Если в результат команды по присвоению переменных не оказывает влияния на окружающую среду оболочки. В случае такой команды (которая состоит только из присваиваний и перенаправлений) присваивания выполняются перед перенаправлениями. В противном случае переменные добавляются в окружающую среду команды и не влияют на текущую среду оболочки. Если при любом назначении будет предпринята попытка присвоить значение переменной, доступной только для чтения, то возникает ошибка и команда завершает работу с ненулевым статусом. .PP Если в результате данной команды выполняется перенаправление, то оно не влияет на текущую окружающую среду оболочки. Ошибка перенаправления приводит к завершению выполнения команды с ненулевым статусом. .PP Если после расширения осталось название команды, то выполнение продолжается, как описано ниже. В противном случае команда завершается. Если одно из расширений содержало замену команды, то статус завершения команды соответствует статусу завершения последней выполненной замены команды. Если замены команд не было, то команда завершает работу с нулевым статусом. .SH "ВЫПОЛНЕНИЕ КОМАНДЫ" После разбиения команды на слова, если в результате получается простая команда и необязательный список аргументов, то оболочка выполняет следующие действия. .PP Если команда не содержит косых черт, то оболочка пытается найти их. Если существует функция оболочки с таким названием, то эта функция вызывается, как описано выше в разделе .SM \fBФУНКЦИИ\fP. Если название функции не совпадает, то оболочка выполняет поиск функции в списке встроенных функций оболочки. Если найдено совпадение, то вызывается эта встроенная функция. .PP Если название не является ни функцией оболочки, ни встроенной командой и не содержит косых черт, то \fBbash\fP выполняет поиск в каждом элементе .SM \fBPATH\fP каталога, содержащего исполняемый файл с таким названием. Оболочка \fBBash\fP использует хэш\-таблицу для запоминания полных путей к исполняемым файлам (смотрите \fBhash\fP в разделе .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). Оболочка Bash выполняет полный поиск по каталогам в .SM \fBPATH\fP только в том случае, если команда не найдена в хэш\-таблице. Если поиск не увенчался успехом, то оболочка выполняет поиск определенной функции оболочки с названием \fBcommand_not_found_handle\fP. Если эта функция существует, то она вызывается в отдельной среде выполнения с исходной командой и аргументами исходной команды в качестве аргументов и статус завершения функции становится статусом завершения этой подоболочки. Если эта функция не определена, то оболочка выводит сообщение об ошибке и возвращает статус завершения, равный 127. .PP Если поиск завершен успешно или если название команды содержит одну или несколько косых черт, то оболочка запускает названную программу в отдельной окружающей среде выполнения. В качестве аргумента 0 присваивается данное название, а остальные аргументы команды присваиваются заданным аргументам, если таковые имеются. .PP Если это выполнение завершается неудачей из\-за того, что файл не имеет исполняемого формата и не является каталогом, предполагается, что это \- файл сценария оболочки \fIshell script\fP, т.е. файл, содержащий команды оболочки и оболочка создает новый экземпляр самой себя для его выполнения. Bash пытается определить, является ли файл текстовым или двоичным и не будет выполнять файлы, которые она определяет как двоичные. Эта подоболочка повторно инициализирует саму себя так, как если бы для обработки сценария была вызвана новая оболочка, за исключением того, что расположение команд, запомненных родительской оболочкой, сохраняются дочерней оболочкой (смотрите \fBхэш\fP ниже в разделе .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP. .PP Если программа представляет собой файл, начинающийся с \fB#!\fP, то в оставшейся части первой строки указывает интерпретатор для программы. Оболочка выполняет указанный интерпретатор в операционных системах, которые сами не обрабатывают этот исполняемый формат. Аргументы интерпретатора состоят из одного необязательного аргумента, следующего за названием интерпретатора в первой строке программы, за которым следует название программы, а затем аргументы команды, если таковые имеются. .SH "ОКРУЖАЮЩАЯ СРЕДА ВЫПОЛНЕНИЯ КОМАНД" Оболочка имеет окружающую среду \fIexecution environment\fP, которая сдержит следующее: .IP \(bu Открытие файлов, унаследованных оболочкой при вызове, измененных с помощью перенаправлений и переданных во встроенную команду \fBexec\fP. .IP \(bu Текущий рабочий каталог, заданный командами \fBcd\fP, \fBpushd\fP или \fBpopd\fP или каталог унаследованный оболочкой при вызове. .IP \(bu Маску режима создания файла задаваемую командой \fBumask\fP или наследуемую от родительской оболочки. .IP \(bu Текущие ловушки, установленные \fBtrap\fP. .IP \(bu Параметры оболочки, которые задаются с помощью присваивания переменной или с помощью команды \fBset\fP или наследуются от родительской оболочки в окружающей среде. .IP \(bu Функции оболочки, определенные во время выполнения или унаследованные от родительской оболочки в окружающей среде. .IP \(bu Опции включаются при вызове (либо по умолчанию, либо с помощью аргументов командной строки), либо с помощью команды \fBset\fP. .IP \(bu Опции, включаемые с помощью команды \fBshopt\fP. .IP \(bu Псевдонимы оболочки, определенные с помощью команды \fBalias\fP. .IP \(bu Различные идентификаторы процессов ID, включая идентификаторы фоновых заданий, значение \fB$$\fP и значение .SM \fBPPID\fP. .PP Когда требуется выполнить простую команду, отличную от встроенной или функции оболочки, то она вызывается в отдельной окружающей среде, которая состоит из следующего. Если не указано иное, то значения наследуются из оболочки. .IP \(bu Открытые файлы оболочки, а также любые изменения и дополнения, указанные в перенаправлениях на команду. .IP \(bu Текущий рабочий каталог. .IP \(bu Маска режима создания файла. .IP \(bu Переменные и функции оболочки, помеченные для экспорта, а также переменные, экспортированные для команды, передаются в окружающей среде. .IP \(bu Ловушки, обнаруженные оболочкой, сбрасываются до значений, унаследованных от родительской оболочки, а ловушки, проигнорированные оболочкой, игнорируются. .PP Команда, вызванная в этой отдельной окружающей среде, не может повлиять на среду выполнения оболочки. .PP Подоболочка \fIsubshell\fP \- это копия процесса оболочки. .PP Подстановка команд, команды, сгруппированные в круглые скобки и асинхронные команды вызываются в среде подоболочки, которая является дубликатом окружающей среды оболочки, за исключением того, что ловушки, перехваченные оболочкой, сбрасываются до значений, которые оболочка унаследовала от своего родительского элемента при вызове. Встроенные команды, которые вызываются как часть конвейера, за исключением, возможно, последнего элемента в зависимости от значения опции оболочки \fBlastpipe\fP, также выполняются в окружающей среде подоболочки. Изменения, внесенные в окружающую среду подоболочки, не могут повлиять на окружающую среду выполнения оболочки. .PP Когда оболочка находится в режиме posix, вложенные подоболочки, созданные для выполнения подстановок команд, наследуют значение опции \fB\-e\fP от своей родительской оболочки. Когда оболочка не находится в режиме posix, то \fBbash\fP удаляет опцию \fB\-e\fP в таких подоболочках. Смотрите описание опции оболочки \fBinherit_errexit\fP ниже, чтобы узнать, как управлять этим поведением, когда оболочка не находится в режиме posix. .PP Если за командой следует символ \fB&\fP и управление заданием не активировано, то стандартным вводом по умолчанию для команды является пустой файл .FN /dev/null . В противном случае вызываемая команда наследует файловые дескрипторы вызывающей оболочки, измененные при перенаправлении. .SH "СРЕДА ОКРУЖЕНИЯ" При вызове программы ей выдается массив строк, называемый окружающей средой \fIenvironment\fP. Это список пар \fIname\fP\-\fIvalue\fP в формате \fIname\fP=\fIvalue\fP. .PP Оболочка предоставляет несколько способов управления средой. При вызове оболочка сканирует свою собственную окружающую среду и создает параметр для каждого найденного названия, автоматически помечая его для использования в дочерних процессах. Выполняемые команды наследуют окружающую среду. Команды \fBexport\fP, \fBdeclare \-x\fP и \fBunset\fP изменяют окружающая среду, добавляя или удаляя параметры и функции. Если значение параметра в окружающей среде изменяется, то новое значение автоматически становится частью окружающей среды, заменяя старое. Окружающая среда, наследуемая любой выполняемой командой, состоит из начальной окружающей среды оболочки, значения которой могут быть изменены в оболочке, за вычетом любых пар, удаленных командами \fBunset\fP или \fBexport \-n\fP, а также любых дополнений, сделанных с помощью команд \fBexport\fP и \fBdeclare \-x\fP. .PP Если какие\-либо присвоения параметров, как описано выше в разделе .SM \fBПАРАМЕТРЫ\fP, отображаются перед простой командой \fIsimple command\fP, то присвоения переменных являются частью окружающей среды этой команды до тех пор, пока она выполняется. Эти команды присваивания влияют только на окружающую среду, которую видит эта команда. Если эти назначения предшествуют вызову функции оболочки, то переменные являются локальными для этой функции и экспортируются в дочерние элементы этой функции. .PP Если задана опция \fB\-k\fP (смотрите встроенную команду \fBset\fP ниже), то в окружающую среду для команды помещаются все параметры, а не только те, которые предшествуют названию команды. .PP Когда \fBbash\fP вызывает внешнюю команду, тогда переменной \fB_\fP присваивается значение полного пути к команде и передается этой команде в ее окружающей среде. .SH "КОД ЗАВЕРШЕНИЯ" Статус выхода выполняемой команды \- это значение, возвращаемое системным вызовом \fIwaitpid\fP или эквивалентной функцией. Статусы выхода (завершения) находятся в диапазоне от 0 до 255, хотя, как объясняется ниже, оболочка может специально использовать значения выше 125. Статусы завершения работы встроенных команд оболочки и составных команд также ограничены этим диапазоном. При определенных обстоятельствах оболочка будет использовать специальные значения для указания конкретных режимов ошибок. .PP Для целей оболочки, команда, которая завершается с нулевым статусом завершения, была выполнена успешно. Таким образом, когда нулевой статус выхода указывает на успех, ненулевой статус выхода указывает на неудачу. .PP Когда команда завершается по фатальному сигналу \fIN\fP, то \fBbash\fP использует значение 128+\fIN\fP в качестве статуса завершения. .PP Если команда не найдена, то дочерний процесс, созданный для ее выполнения, возвращает статус 127. Если команда найдена, но не может быть выполнена, возвращается статус 126. .PP Если команда не выполняется из\-за ошибки во время расширения или перенаправления, то статус завершения больше нуля. .PP Встроенные команды оболочки возвращают статус 0 (\fItrue\fP) в случае успешного выполнения и ненулевое значение (\fIfalse\fP), если во время их выполнения возникает ошибка. Все встроенные команды возвращают статус завершения, равный 2, что указывает на неправильное использование, как правило, недопустимые опции или отсутствующие аргументы. .PP Статус завершения последней команды доступен (может быть прочитан) в специальном параметре $?. .PP Сама \fBBash\fP возвращает статус завершения последней выполненной команды, если только не возникает синтаксическая ошибка, и в этом случае, она завершается с ненулевым значением. Смотрите также встроенную команду \fBexit\fP ниже. .SH СИГНАЛЫ Когда \fBbash\fP является интерактивной, в отсутствие каких\-либо ловушек, тогда она игнорирует .SM \fBSIGTERM\fP (чтобы команда \fBkill 0\fP не уничтожала интерактивную оболочку) и перехватывает и обрабатывает .SM \fBSIGINT\fP (чтобы встроенная команда \fBwait\fP могла быть прервана). Когда \fBbash\fP получает .SM \fBSIGINT\fP, тогда она выходит из любых выполняющихся циклов. Во всех случаях \fBbash\fP игнорирует .SM \fBSIGQUIT\fP. Если управление заданиями запущено, то \fBbash\fP игнорирует сигналы .SM \fBSIGTTIN\fP, .SM \fBSIGTTOU\fP и .SM \fBSIGTSTP\fP. .PP Встроенная команда \fBtrap\fP изменяет обработку сигналов оболочки, как описано ниже. .PP Для команд, не являющихся встроенными, которые выполняет \fBbash\fP, обработчики сигналов имеют значения, унаследованные оболочкой от родительской оболочки, если только \fBtrap\fP не настроит их на игнорирование и в этом случае дочерний процесс также проигнорирует их. Когда управление заданием не выполняется, асинхронные команды игнорируют .SM \fBSIGINT\fP и .SM \fBSIGQUIT\fP в дополнение к этим, унаследованным обработчикам. Команды, выполняемые в результате подстановки команд, игнорируют генерируемые клавиатурой сигналы управления заданием .SM \fBSIGTTIN\fP, .SM \fBSIGTTOU\fP и .SM \fBSIGTSTP\fP. .PP По умолчанию оболочка завершает работу после получения команды .SM \fBSIGHUP\fP. Перед выходом интерактивная оболочка повторно отправляет команду .SM \fBSIGHUP\fP всем заданиям, запущенным или остановленным. Оболочка отправляет .SM \fBSIGCONT\fP остановленным заданиям, чтобы гарантировать, что они получат .SM \fBSIGHUP\fP (смотрите раздел .SM \fBУПРАВЛЕНИЕ ЗАДАНИЯМИ\fP ниже для получения дополнительной информации о запущенных и остановленных заданиях). Чтобы оболочка не отправляла сигнал конкретному заданию, удалите его из таблицы заданий с помощью встроенной команды \fBdisown\fP (смотрите ниже раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP) или отметьте его так, чтобы он не получал .SM \fBSIGHUP\fP с помощью \fBdisown \-h\fP. .PP Если опция оболочки \fBhuponexit\fP была установлена с помощью команды \fBshopt\fP, то \fBbash\fP отправляет сообщение .SM \fBSIGHUP\fP всем заданиям при завершении входа интерактивной оболочки. .PP Если \fBbash\fP ожидает завершения команды и получает сигнал, для которого был установлена ловушка, то она не будет выполнять ловушку до тех пор, пока команда не завершится. Если \fBbash\fP ожидает асинхронной команды с помощью встроенной команды \fBwait\fP и получает сигнал, для которого была установлена ловушка, то встроенная команда \fBwait\fP немедленно вернется со статусом завершения, превышающим 128, сразу после чего оболочка выполнит ловушку. .PP Когда управление заданиями не включено и \fBbash\fP ожидает завершения команды переднего плана, тогда оболочка получает сигналы, генерируемые клавиатурой, такие как .SM \fBSIGINT\fP (обычно генерируемые \fB\*^C\fP), которые пользователи обычно намереваются отправить этой команде. Это происходит потому, что оболочка и команда находятся в той же группе процессов, что и терминал и \fB\*^C\fP отправляет .SM \fBSIGINT\fP всем процессам в этой группе процессов. Поскольку \fBbash\fP по умолчанию не включает управление заданиями, когда оболочка не является интерактивной, то этот сценарий наиболее распространен в неинтерактивных оболочках. .PP Когда управление заданиями включено и \fBbash\fP ожидает завершения команды переднего плана, то оболочка не получает сигналы, генерируемые клавиатурой, поскольку она не находится в той же группе процессов, что и терминал. Этот сценарий наиболее распространен в интерактивных оболочках, где \fBbash\fP пытается включить управление заданиями по умолчанию. Смотрите раздел .SM \fBУПРАВЛЕНИЕ ЗАДАНИЯМИ\fP ниже для получения дополнительной информации о группах процессов. .PP Когда управление заданиями не включено и \fBbash\fP получает сигнал .SM \fBSIGINT\fP во время ожидания команды переднего плана, то она ожидает завершения выполнения этой команды переднего плана, а затем решает, что делать с сигналом .SM \fBSIGINT\fP: .IP 1. Если команда завершается из\-за сигнала .SM \fBSIGINT\fP, то \fBbash\fP делает вывод, что пользователь намеревался также отправить .SM \fBSIGINT\fP в оболочку и выполняет действия с .SM \fBSIGINT\fP (например, запустив ловушку .SM \fBSIGINT\fP, выйдя из неинтерактивной оболочки или вернувшись на верхний уровень для чтения новой команды). .IP 2. Если команда не завершается по сигналу .SM \fBSIGINT\fP, то программа сама обрабатывает сигнал .SM \fBSIGINT\fP и не рассматривает этот сигнал как фатальный. В этом случае \fBbash\fP также не рассматривает сигнал .SM \fBSIGINT\fP как фатальный, а вместо этого предполагает, что сигнал .SM \fBSIGINT\fP использовался как часть нормальной работы программы (например, редактор emacs использует его для отмены команд редактирования) или отвергнутый намеренно. Однако, \fBbash\fP, для обеспечения совместимости, запустит любой перехватчик, установленный для сигнала .SM \fBSIGINT\fP, как это осуществляется применительно к любому другому перехватываемому сигналу, который она получает, ожидая завершения команды интерактивного режима. .PP Когда включено управление заданиями, тогда \fBbash\fP не получает сигналы, генерируемые клавиатурой, такие как .SM \fBSIGINT\fP, пока она ожидает команды переднего плана. Интерактивная оболочка не обращает внимания на сигнал .SM \fBSIGINT\fP, даже если в результате команда переднего плана завершается, за исключением указания её статуса завершения. Если оболочка не является интерактивной, а команда переднего плана завершается из\-за сигнала .SM \fBSIGINT\fP, то \fBbash\fP делает вид, что она сама получила .SM \fBSIGINT\fP (сценарий 1 выше), для обеспечения совместимости. .SH "УПРАВЛЕНИЕ ЗАДАНИЯМИ" Управление заданиями \fIJob control\fP означает возможность выборочно останавливать (приостанавливать, \fIsuspend\fP) выполнение процессов и продолжать (\fIresume\fP) их выполнение позже. Пользователь обычно использует это средство с помощью интерактивного интерфейса, предоставляемого, совместно, драйвером терминала ядра операционной системы и \fBbash\fP. .PP Оболочка связывает задание \fIjob\fP с каждым конвейером. В ней хранится таблица выполняемых в данный момент заданий, которую будет отображать команда \fBjobs\fP. Каждое задание имеет номер задания \fIjob number\fP, который в заданиях \fBjobs\fP отображается в квадратных скобках. Номера заданий начинаются с 1. Когда \fBbash\fP запускает задание асинхронно (в \fIbackground\fP), она выводит строку, которая выглядит следующим образом: .RS .PP [1] 25647 .RE .PP это указывает, что данное задание имеет номер задания 1 и что идентификатор последнего процесса в конвейере, связанного с этим заданием, равен 25647. Все процессы в одном конвейере являются участниками одного задания. \fBBash\fP использует абстракцию \fIjob\fP в качестве основы для управления заданиями. .PP Чтобы упростить реализацию пользовательского интерфейса для управления заданиями, у каждого процесса есть идентификатор группы процессов \fIprocess group ID\fP и операционная система поддерживает понятие текущего идентификатора группы терминальных процессов \fIcurrent terminal process group ID\fP. Этот идентификатор группы терминальных процессов связан с управляющим терминалом \fIcontrolling terminal\fP. .PP Процессы, имеющие одинаковый идентификатор группы процессов, считаются частью одной и той же группы процессов \fIprocess group\fP. Члены группы процессов переднего плана \fIforeground\fP (процессы, идентификатор группы процессов которых равен текущему идентификатору группы процессов терминала) получают сигналы, генерируемые клавиатурой, такие как .SM \fBSIGINT\fP. Процессы в группе процессов переднего плана называются процессами переднего плана \fIforeground\fP . Процессами фонового \fIBackground\fPуровня являются процессы, идентификатор группы процессов которых отличается от идентификатора управляющего терминала; такие процессы невосприимчивы к сигналам, генерируемым клавиатурой. Только процессам переднего плана разрешено считывать данные из/или, если пользователь укажет это с помощью .Q "stty tostop" , записи на управляющий терминал. Система отправляет сигнал .SM \fBSIGTTIN (SIGTTOU)\fP фоновым процессам, которые пытаются выполнить чтение или запись .Q tostop с терминала, который, если его не перехватят, приостанавливает процесс. .PP Если операционная система, в которой запущена \fBbash\fP, поддерживает управление заданиями, то \fBbash\fP содержит средства для его использования. Ввод символа приостановить \fIsuspend\fP (обычно \fB\*^Z\fP, Control\-Z) во время выполнения процесса останавливает этот процесс и возвращает управление \fBbash\fP. Ввод символа отложенная приостановка \fIdelayed suspend\fP (обычно \fB\*^Y\fP, Control\-Y) приводит к остановке процесса при попытке считывания входных данных с терминала и возвращает управление \fBbash\fP. Затем пользователь управляет состоянием этого задания, используя команду \fBbg\fP, чтобы продолжить его в фоновом режиме, команду \fBfg\fP, чтобы продолжить его на переднем плане, или команду \fBkill\fP, чтобы завершить его. Символ приостановки вступает в силу немедленно и имеет дополнительный побочный эффект, заключающийся в отбрасывании всех ожидающих вывода данных и изображений текста. Чтобы принудительно остановить фоновый процесс или остановить процесс, не связанный с текущей сессией терминала, отправьте ему сигнал .SM \fBSIGSTOP\fP с помощью команды \fBkill\fP. .PP Существует несколько способов указать задание оболочке. Символ \fB%\fP указывает на спецификацию задания (jobspec). .PP Номер задания \fIn\fP может быть обозначено как \fB%n\fP. Для обозначения задания также может использоваться префикс названия, используемого для его запуска, или подстрока, которая отображается в его командной строке. Например, \fB%ce\fP относится к заданию, название команды которого начинается с \fBce\fP. С другой стороны, использование \fB%?ce\fP относится к любому заданию, содержащему строку \fBce\fP в командной строке. Если префикс или подстрока совпадают с несколькими заданиями, то \fBbash\fP сообщает об ошибке. .PP Символы \fB%%\fP и \fB%+\fP указывают на то, как оболочка определяет текущее задание \fIcurrent job\fP. Один символ % (без дополнительных других символов) относится к текущему заданию. Символы \fB%\-\fP относится к предыдущему заданию \fIprevious job\fP. Когда задание запускается в фоновом режиме, оно останавливается, находясь на переднем плане, или возобновляется в фоновом режиме, то оно становится текущим заданием. Задание, которое было текущим, становится предыдущим заданием. Когда текущее задание завершается, то текущим заданием становится предыдущее задание. Если существует только одно задание, для обозначения этого задания можно использовать как \fB%+\fP, так и \fB%\-\fP. В выходных данных, относящихся к заданиям (например, в выходных данных команды \fBjobs\fP), текущее задание всегда помечается символом \fB+\fP, а предыдущее задание \- символом \fB\-\fP. .PP Простое присвоение названия заданию может быть использовано для того, чтобы вывести его на передний план: \fB%1\fP \- это синоним .Q "fg %1" , перемещения задание 1 с заднего плана на передний. Аналогично, .Q "%1 &" возобновляет работу задания 1 в фоновом режиме, что эквивалентно .Q "bg %1" . .PP Оболочка немедленно узнает об этом всякий раз, когда задание меняет свое состояние. Обычно \fBbash\fP ожидает, пока не появится запрос на вывод, прежде чем уведомлять пользователя об изменениях в статусе задания, чтобы не прерывать другие выходные данные, хотя оболочка будет уведомлять об изменениях в статусе задания после завершения команды переднего плана в списке, перед выполнением следующей команды в списке. Если опция \fB\-b\fP для встроенной команды \fBset\fP включена, то \fBbash\fP немедленно сообщает об изменениях статуса задания. \fBBash\fP выполняет любую проверку на .SM \fBSIGCHLD\fP для каждого дочернего элемента, который завершается. .PP Когда задание завершается и \fBbash\fP уведомляет пользователя об этом, то \fBbash\fP удаляет задание из таблицы. Оно не появится в выходных данных задания \fBjobs\fP, но в ожидании \fBwait\fP оболочка сообщит о своем статусе завершения, если в качестве аргумента будет указан идентификатор процесса, связанный с заданием. Когда таблица пуста, номера заданий начинаются с 1. .PP Если пользователь попытается выйти из \fBbash\fP во время остановки заданий (или, если опция оболочки \fBcheckjobs\fP была включена с помощью встроенной выполняющейся команды \fBshopt\fP, то оболочка выведет предупреждающее сообщение и, если опция \fBcheckjobs\fP включена, то выведет список заданий и их статусы. Затем можно использовать команду \fBjobs\fP для проверки их статуса. Если пользователь немедленно снова попытается выйти, без промежуточной команды, то \fBbash\fP не выводит другое предупреждение и завершает все остановленные задания. .PP Когда оболочка ожидает задание или процесс, используя встроенную команду \fBwait\fP и управление заданием включено, то команда \fBwait\fP возвращается при изменении состояния задания. Опция \fB\-f\fP заставляет команду \fBwait\fP ожидать завершения задания или процесса перед возвратом. .SH ПОДСКАЗКИ При выполнении в интерактивном режиме \fBbash\fP отображает основное приглашение .SM \fBPS1\fP, когда она готова прочитать команду и дополнительное приглашение .SM \fBPS2\fP, когда требуется дополнительный ввод для завершения команды. .PP \fBBash\fP проверяет значение переменной массива \fBPROMPT_COMMAND\fP непосредственно перед выводом каждого основного запроса. Если какие\-либо элементы в \fBPROMPT_COMMAND\fP заданы и не равны нулю, то Bash выполняет каждое значение в таком порядке, как если бы оно было введено в командной строке. \fBBash\fP отображает .SM \fBPS0\fP после считывания команды, но перед ее выполнением. .PP Оболочка \fBBash\fP отображает .SM \fBPS4\fP, как описано выше, перед отслеживанием каждой команды, когда включена опция \fB\-x\fP. .PP Оболочка \fBBash\fP позволяет настраивать строки \fBPS0\fP, \fBPS1\fP, \fBPS2\fP и \fBPS4\fP, вставляя несколько специальных символов, экранированных обратной косой чертой, которые декодируются следующим образом: .RS .TP \fB\ea\fP Символ звонка в формате ASCII (07). .PD 0 .TP \fB\ed\fP Дата в .Q "Weekday Month Date" формате (например, .Q "Tue May 26" ). .TP \fB\eD{\fP\fIformat\fP\fB}\fP Формат \fIformat\fP передается как \fIstrftime\fP(3), а результат вставляется в строку запроса; пустое значение \fIformat\fP приводит к представлению времени, зависящему от локали. Фигурные скобки обязательны. .TP \fB\ee\fP Экранирующий символ ASCII (033). .TP \fB\eh\fP Название хоста вплоть до первого .Q . . .TP \fB\eH\fP Названия хоста. .TP \fB\ej\fP Количество заданий, которыми в данный момент управляет оболочка. .TP \fB\el\fP Основное название терминального устройства оболочки (например, .Q ttys0 ). .TP \fB\en\fP Новая строка. .TP \fB\er\fP Возврат каретки. .TP \fB\es\fP Название оболочки: основное название \fB$0\fP (часть, следующая за последней косой чертой). .TP \fB\et\fP Текущее время в 24\-часовом формате ЧЧ:ММ:СС. .TP \fB\eT\fP Текущее время в 12\-часовом формате ЧЧ:ММ:СС. .TP \fB\e@\fP Текущее время в 12\-часовом формате до полудня/после полудня. .TP \fB\eA\fP Текущее время в 24\-часовом формате ЧЧ:ММ. .TP \fB\eu\fP Имя текущего пользователя. .TP \fB\ev\fP Версия \fBbash\fP (например, 2.00). .TP \fB\eV\fP Выпуск \fBbash\fP, версия + уровень исправления (например, 2.00.0) .TP \fB\ew\fP Значение переменной оболочки \fBPWD\fP (\fB$PWD\fP), где .SM \fB$HOME\fP обозначается тильдой (используется значение переменной .SM \fBPROMPT_DIRTRIM\fP). .TP \fB\eW\fP Основное название \fB$PWD\fP, а .SM \fB$HOME\fP сокращается тильдой. .TP \fB\e!\fP Исторический номер этой команды. .TP \fB\e#\fP Номер этой команды. .TP \fB\e$\fP Если эффективный идентификатор пользователя UID равен 0, то A \fB#\fP, в противном случае \fB$\fP. .TP \fB\e\fP\fInnn\fP Символ, соответствующий восьмеричному числу \fInnn\fP. .TP \fB\e\e\fP Обратная косая черта. .TP \fB\e[\fP Начало последовательности непечатаемых символов, которая может быть использована для встраивания последовательности управления терминалом в приглашение. .TP \fB\e]\fP Окончание последовательности непечатаемых символов. .PD .RE .PP Номер команды и номер истории команды обычно различаются: номер истории команды \- это ее позиция в списке истории, который может включать команды, восстановленные из файла истории (смотрите раздел .SM \fBИСТОРИЯ\fP ниже), в то время как номер команды \- это позиция в последовательности команд выполняемых во время текущего сеанса оболочки. После того, как строка расшифрована, она расширяется с помощью расширения параметров, подстановки команд, арифметического расширения и удаления кавычек, в зависимости от значения опции оболочки \fBpromptvars\fP (смотрите описание команды \fBshopt\fP в разделе .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже).. Это может иметь нежелательные побочные эффекты, если экранированные части строки представляются внутри командной строки или содержат символы, специальные для расширения слова. .SH "БИБЛИОТЕКА READLINE" Это библиотека, которая обрабатывает вводимые данные при использовании интерактивной оболочки, если только при вызове оболочки не указана опция \fB\-\-noediting\fP. Редактирование строк также используется при использовании опции \fB\-e\fP для встроенной команды \fBread\fP. По умолчанию команды редактирования строк аналогичны командам emacs; также доступен интерфейс редактирования строк в стиле vi. Редактирование строк можно включить в любое время, используя опции \fB\-o emacs\fP или \fB\-o vi\fP для встроенной команды \fBset\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). Чтобы отключить редактирование строк после запуска оболочки, используйте опции \fB+o emacs\fP или \fB+o vi\fP для встроенной команды \fBset\fP. .SS "Формат библиотеки Readline" В этом подразделе используются концепции редактирования в стиле редактора Emacs и его обозначения для нажатия клавиш. Управляющие клавиши обозначаются C\-\fIkey\fP, например, C\-n означает Control\-N. Аналогично, клавиша \fImeta\fP обозначаются M\-\fIkey\fP, поэтому M\-x означает Мета\-X. Мета\-клавиша часто обозначается .Q Alt или .Q Option . .PP На клавиатурах без клавиши \fIMeta\fP M\-\fIx\fP означает ESC \fIx\fP, т.е. нажать и отпустить клавишу Escape, затем последовательно нажать и отпустить клавишу \fIx\fP. Таким образом, ESC становится префиксом \fImeta prefix\fP. Комбинация M\-C\-\fIx\fP означает ESC Control\-\fIx\fP: нажать и отпустить клавишу Escape, затем нажать и удерживать клавишу Control, одновременно нажимая клавишу \fIx\fP, затем отпустить обе клавиши. .PP На некоторых клавиатурах модификатор мета\-клавиши выдает символы с установленным восьмым разрядом (0200). Вы можете использовать переменную \fBenable\-meta\-key\fP, чтобы контролировать, будет ли это выполняться, если клавиатура это позволяет. На многих других устройствах терминал или эмулятор терминала преобразует мета\-клавишу в последовательность клавиш, начинающуюся с ESC, как описано в предыдущем параграфе. .PP Если ваша клавиша \fIMeta\fP создает последовательность клавиш с мета\-префиксом ESC, то вы можете настроить привязки клавиш M\-\fIkey\fP, которые вы указываете (смотрите подраздел \fBПривязки клавиш библиотеки Readline\fP ниже), аналогично, установив переменную \fBforce\-meta\-prefix\fP. .PP Командам библиотеки \fBReadline\fP могут присваиваться числовые значения аргументов \fIarguments\fP, которые обычно используются для подсчета повторений. Однако иногда значение имеет знак аргумента. Передача отрицательного аргумента команде, которая действует в прямом направлении (например, \fBkill\-line\fP) заставляет эту команду действовать в обратном направлении. Ниже приведены команды, поведение которых с аргументами отличается от этого. .PP Точка \fIpoint\fP \- это текущее положение курсора, а метка \fImark\fP относится к сохраненному положению курсора. Текст между точкой и меткой называется область \fIregion\fP. В библиотеке \fBReadline\fP есть концепция активной области \fIactive region\fP: когда область активна, тогда \fBreadline\fP повторно отображает область, используя значение переменной \fBactive\-region\-start\-color\fP. Переменная \fBenable\-active\-region\fP это включает и выключает. Несколько команд делают область активной; они приведены ниже. .PP Когда команда описывается как удаляющая текст \fIkilling\fP, то удаленный текст сохраняется для возможного использования в будущем (при "выдергивании" \fIyanking\fP). Уничтоженный (удалённый) текст сохраняется в кольце удаления \fIkill ring\fP. При последовательном удалении удаленный текст объединяется в один блок, который можно удалить за один раз. Команды, которые не удаляют текст, разделяют фрагменты текста в кольце удаления. .SS "Инициализация библиотеки Readline" Библиотека \fBReadline\fP настраивается путем ввода команд в файл инициализации (файл \fIinputrc\fP). Название этого файла берется из значения переменной оболочки .SM \fB\%INPUTRC\fP. Если эта переменная не задана, то по умолчанию используется .FN \*~/.inputrc . Если этот файл не существует или не может быть прочитан, то \fBreadline\fP выполняет поиск .FN /etc/inputrc . Когда запускается программа, использующая библиотеку \fBreadline\fP, тогда \fBreadline\fP считывает файл инициализации и устанавливает найденные в нем привязки клавиш и переменные, прежде чем считывать любой пользовательский ввод. .PP В файле inputrc разрешено использовать только несколько основных конструкций. Пустые строки игнорируются. Строки, начинающиеся с \fB#\fP, являются комментариями. Строки, начинающиеся с \fB$\fP, обозначают условные конструкции. Остальные строки обозначают привязки клавиш и настройки переменных. .PP Привязки клавиш по умолчанию в этом разделе могут быть изменены с помощью команд привязки клавиш в файле \fIinputrc\fP. Программы, использующие библиотеку \fBreadline\fP, включая \fBbash\fP, могут добавлять свои собственные команды и привязки. .PP Например, размещение .RS .PP M\-Control\-u: универсальный аргумент .RE или .RS C\-Meta\-u: универсальный аргумент .RE .LP ввод в \fIinputrc\fP заставил бы M\-C\-u выполнить команду \fBreadline\fP универсальный аргумент \fIuniversal\-argument\fP. .PP Привязки клавиш могут содержать следующие символические названия: \fIDEL\fP, \fIESC\fP, \fIESCAPE\fP, \fILFD\fP, \fINEWLINE\fP, \fIRET\fP, \fIRETURN\fP, \fIRUBOUT\fP (деструктивный обратный пробел), \fISPACE\fP, \fISPC\fP и \fITAB\fP. .PP В дополнение к названиям команд, \fBreadline\fP позволяет привязывать клавиши к строке, которая вставляется при нажатии клавиши (\fImacro\fP). Различие между макросом и командой заключается в том, что макрос заключен в одинарные или двойные кавычки. .SS "Привязки клавиш библиотеки Readline" Синтаксис для управления привязками клавиш в файле \fIinputrc\fP прост. Все, что требуется, \- это название команды или текст макроса и последовательность клавиш, к которой он должен быть привязан. Последовательность клавиш может быть указана одним из двух способов: 1) в виде символического названия клавиши, возможно, с префиксами \fIMeta\-\fP или \fIControl\-\fP 2) или в виде последовательности клавиш, состоящей из одного или нескольких символов, заключенных в двойные кавычки. Последовательность клавиш и название разделяются двоеточием. Между названием и двоеточием не должно быть пробелов. .PP При использовании формы \fBkeyname\fP:\^\fIfunction\-name\fP или \fImacro\fP, \fIkeyname\fP \- это название клавиши на английском языке. Например: .PP .RS .EX .nf Control\-u: universal\-argument Meta\-Rubout: backward\-kill\-word Control\-o: \*"> output\*" .fi .EE .RE .LP В приведенном выше примере \fIC\-u\fP привязана к функции \fBuniversal\-argument\fP, \fIM\-DEL\fP привязана к функции \fBbackward\-kill\-word\fP, а \fIC\-o\fP привязана к запуску макроса, выраженного с правой стороны (то есть для вставки текста .Q "> output" в строку). .PP Во второй форме, \fB\*"keyseq\*"\fP:\^\fIfunction\-name\fP или \fImacro\fP, \fBkeyseq\fP отличается от приведенной выше \fBkeyname\fP тем, что строки, обозначающие всю последовательность клавиш, могут быть указаны путем заключения последовательности в двойные кавычки. Можно использовать некоторые экранирующие клавиши в стиле GNU Emacs, как в следующем примере, но ни одно из символических названий не распознается. .PP .RS .EX .nf \*"\eC\-u\*": universal\-argument \*"\eC\-x\eC\-r\*": re\-read\-init\-file \*"\ee[11\*~\*": \*"Function Key 1\*" .fi .EE .RE .PP В этом примере клавиша \fIC\-u\fP снова привязана к функции \fBuniversal\-argument\fP. Клавиша \fIC\-x C\-r\fP привязана к функции \fBre\-read\-init\-file\fP, а \fIESC [ 1 1 \*~\fP привязана к вставке текста .Q "Function Key 1" . .PP Полный набор escape\-последовательностей в стиле GNU Emacs, доступных при указании клавишных последовательностей, представлен следующим образом .RS .PD 0 .TP \fB\eC\-\fP Управляющий префикс. .TP \fB\eM\-\fP Добавление мета\-префикса или преобразование следующего символа в мета\-символ, как описано ниже в подразделе \fBПринудительный мета\-префикс\fP. .TP \fB\ee\fP Экранирующий символ. .TP \fB\e\e\fP Обратная косая черта. .TP \fB\e\*"\fP Буква \*", двойная кавычка. .TP \fB\e\*'\fP Буква \*', одиночная кавычка. .RE .PD .PP В дополнение к экранирующим последовательностям в стиле GNU Emacs доступен второй набор экранирующих символов с обратной косой чертой: .RS .PD 0 .TP \fB\ea\fP сигнал тревоги (сирена) .TP \fB\eb\fP возврат на один символ .TP \fB\ed\fP delete .TP \fB\ef\fP новая страница .TP \fB\en\fP newline .TP \fB\er\fP возврат каретки .TP \fB\et\fP горизонтальная табуляция .TP \fB\ev\fP вертикальная табуляция .TP \fB\e\fP\fInnn\fP Восьмиразрядный символ, значением которого является восьмеричное значение \fInnn\fP (от одной до трех цифр). .TP \fB\ex\fP\fIHH\fP Восьмибитный символ, значением которого является шестнадцатеричное значение \fIHH\fP (одна или две шестнадцатеричные цифры). .RE .PD .PP При вводе текста макроса необходимо использовать одинарные или двойные кавычки для указания определения макроса. Предполагается, что текст без кавычек является названием функции. Описанные выше экранирующие обратные косые черты раскрываются в теле макроса. Обратная косая черта заключает в кавычки любой другой символ в тексте макроса, включая \*" и \*'. .PP \fBBash\fP отобразит или изменит текущие привязки клавиш \fBreadline\fP с помощью встроенной команды \fBbind\fP. Опции \fB\-o emacs\fP или \fB\-o vi\fP для встроенной команды \fBset\fP (смотрите ниже раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP) изменяют режим редактирования во время интерактивного использования. .SS "Переменные Readline" В \fBReadline\fP есть переменные, которые можно использовать для дальнейшей настройки её поведения. Переменная может быть задана в файле \fIinputrc\fP с помощью инструкции вида .RS .PP \fBset\fP \fIvariable\-name\fP \fIvalue\fP .RE или с помощью встроенной команды \fBbind\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). .PP За исключением случаев, когда это указано, переменные \fBreadline\fP могут принимать значения "Включено" \fBOn\fP или "Выключено" \fBOff\fP (без учета регистра). Нераспознанные названия переменных игнорируются. Когда \fBreadline\fP считывает значение переменной, пустые или нулевые значения, .Q on (без учета регистра) и .Q 1 эквивалентны \fBOn\fP. Все остальные значения эквивалентны \fBOff\fP. .PP Команда \fBbind \-V\fP выводит список текущих названий и значений переменных \fBreadline\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). .PP Переменными и их значениями по умолчанию являются: .PP .PD 0 .TP \fBactive\-region\-start\-color\fP Строковая переменная, которая управляет цветом текста и фоном при отображении текста в активной области (смотрите описание функции \fBenable\-active\-region\fP ниже). Эта строка не должна занимать никаких физических позиций символов на дисплее, поэтому она должна состоять только из терминальных escape\-последовательностей. Она выводится на терминал перед отображением текста в активной области. Значение этой переменной возвращается к значению по умолчанию при каждом изменении типа терминала. Значение по умолчанию \- это строка, которая переводит терминал в режим ожидания, как указано в описании терминала terminfo. Примерное значение может быть следующим .Q \ee[01;33m . .TP \fBactive\-region\-end\-color\fP Строковая переменная, которая .Q undoes эффекты "активная область\-начальный цвет" \fBactive\-region\-start\-color\fP и восстанавливает .Q normal отображение на дисплее терминала после отображения текста в активной области. Эта строка не должна занимать никаких физических позиций символов на дисплее, поэтому она должна состоять только из управляющих последовательностей терминала. Она выводится на терминал после отображения текста в активной области. Эта переменная возвращается к значению по умолчанию при каждом изменении типа терминала. Значением по умолчанию является строка, которая выводит терминал из режима ожидания, как указано в описании терминала terminfo. Примерным значением может быть .Q \ee[0m . .TP \fBbell\-style (audible)\fP Управляет тем, что происходит, когда \fBreadline\fP хочет вызвать звонок терминала. Если задано значение \fBnone\fP, то \fBreadline\fP никогда не вызовет звонок. Если задано значение \fBvisible\fP, то \fBreadline\fP использует видимый звонок, если он доступен. Если установлено значение \fBaudible\fP, то \fBreadline\fP попытается вызвать звуковой звонок терминала. .TP \fBbind\-tty\-special\-chars (On)\fP Если задано значение \fBOn\fP, то \fBreadline\fP пытается привязать управляющие символы, которые специально обрабатываются драйвером терминала ядра, к их эквивалентам \fBreadline\fP. Они переопределяют описанные здесь привязки \fBreadline\fP по умолчанию. Тип .Q "stty \-a" в приглашении \fBbash\fP, чтобы просмотреть текущие настройки вашего терминала, включая специальные управляющие символы (обычно \fBcchars\fP). .TP \fBblink\-matching\-paren (Off)\fP Если установлено значение \fBOn\fP, то \fBreadline\fP пытается на короткое время переместить курсор на открывающую скобку при вставке закрывающей скобки. .TP \fBcolored\-completion\-prefix (Off)\fP Если задано значение \fBOn\fP, то при выводе списка завершений \fBreadline\fP отображает общий префикс набора возможных завершений, используя другой цвет. Определения цвета взяты из значения переменной окружения \fBLS_COLORS\fP. Если имеется определение цвета \fB$LS_COLORS\fP для обычного суффикса .Q .readline-colored-completion-prefix , \fBreadline\fP использует этот цвет для общего префикса вместо его значения по умолчанию. .TP \fBcolored\-stats (Off)\fP .\" Tucking multiple macro calls into a paragraph tag requires some .\" finesse. We require `\c`, and while the single-font macros don't .\" honor input trap continuation, the font alternation macros do. Если задано значение \fBOn\fP, то \fBreadline\fP отображает возможные завершения, используя разные цвета, чтобы указать тип файла. Определения цвета берутся из значения переменной среды окружения \fBLS_COLORS\fP. .TP \fBcomment\-begin\ (\fP .Q \fB#\fP \fB)\fP Строка, которую вставляет команда \fBreadline\fP \fBinsert\-comment\fP. Эта команда привязана к \fBM\-#\fP в режиме emacs и к \fB#\fP в режиме vi. .TP \fBcompletion\-display\-width (\-1)\fP Количество столбцов экрана, используемых для отображения возможных совпадений при выполнении завершения. Значение игнорируется, если оно меньше 0 или больше ширины экрана терминала. При значении 0 совпадения отображаются по одному в строке. Значение по умолчанию равно \-1. .TP \fBcompletion\-ignore\-case (Off)\fP Если задано значение \fBOn\fP, то \fBreadline\fP выполняет сопоставление названий файлов и завершение без учета регистра. .TP \fBcompletion\-map\-case (Off)\fP Если задано значение \fBOn\fP и включено значение "Завершение\-игнорирования регистра", то \fBreadline\fP обрабатывает дефисы (\fI\-\fP) и подчеркивания (\fI_\fP) как эквивалентные при сопоставлении названий файлов и завершений без учета регистра. .TP \fBcompletion\-prefix\-display\-length (0)\fP Максимальная длина в символах общего префикса в списке возможных дополнений, который отображается без изменений. Если задано значение, большее нуля, то \fBreadline\fP заменяет общие префиксы, длина которых превышает это значение, многоточием при отображении возможных дополнений. Если завершение начинается с точки, а начальная строка \fBreadline\fP завершает названия файлов, то вместо многоточия используются три символа подчеркивания. .TP \fBcompletion\-query\-items (100)\fP Это определяет, когда пользователя запрашивают о просмотре количества возможных завершений, сгенерированных командой возможные завершения \fBpossible\-completions\fP. Может быть установлено любое целое значение, большее или равное нулю. Если количество возможных завершений больше или равно значению этой переменной, то \fBreadline\fP запрашивает, желает ли пользователь просмотреть их; в противном случае \fBreadline\fP просто выводит их список в терминале. Нулевое значение означает, что \fBreadline\fP никогда не должна задавать запрос; отрицательные значения рассматриваются как нулевые. .TP \fBconvert\-meta (On)\fP Если задано значение \fBOn\fP, то \fBreadline\fP преобразует считываемые символы, для которых установлен восьмой бит, в последовательность клавиш ASCII, очищая восьмой бит и добавляя к нему escape\-символ (преобразуя символ в мета\-префикс). Значение по умолчанию \- \fIOn\fP, но \fBreadline\fP устанавливает значение \fIOff\fP, если локаль содержит символы, кодировки которых могут включать байты с установленным восьмым разрядом. Эта переменная зависит от категории локали \fBLC_CTYPE\fP и может изменяться при изменении локали. Эта переменная также влияет на привязку клавиш; смотрите описание \fBПринудительный мета\-префикс\fP ниже. .TP \fBdisable\-completion (Off)\fP Если задано значение \fBOn\fP, то \fBreadline\fP запрещает завершение слова. Символы завершения вставляются в строку так, как если бы они были сопоставлены с \fBself\-insert\fP. .TP \fBecho\-control\-characters (On)\fP Если установлено значение \fBOn\fP, в операционных системах, которые указывают, что они его поддерживают, то \fBreadline\fP отображает символ, соответствующий сигналу, генерируемому с клавиатуры. .TP \fBediting\-mode (emacs)\fP Определяет, будет ли \fBreadline\fP использовать набор привязок клавиш, аналогичный \fIEmacs\fP или \fIvi\fP. Режим редактирования \fBediting\-mode\fP может быть установлен либо в \fBemacs\fP, либо в \fBvi\fP. .TP \fBemacs\-mode\-string (@)\fP Если включена переменная \fIshow\-mode\-in\-prompt\fP, то эта строка отображается непосредственно перед последней строкой основного приглашения, когда включен режим редактирования emacs. Значение раскрывается как привязка к клавише, поэтому доступен стандартный набор мета\- и управляющих префиксов, а также escape\-последовательностей с обратной косой чертой. Символы \e1 и \e2 являются начальными и конечными последовательностями непечатаемых символов, которые могут быть использованы для встраивания последовательности управления терминалом в строку режима. .TP \fBenable\-active\-region (On)\fP Когда для этой переменной задано значение \fIOn\fP, тогда \fBreadline\fP позволяет определенным командам обозначать область как \fIactive\fP. Когда область активна, тогда \fBreadline\fP выделяет текст в области, используя значение переменной \fBactive\-region\-start\-color\fP, значение которой по умолчанию равно строке, включающей режим выделения терминала. В активной области отображается текст, вставленный с помощью вставки в квадратных скобках и любой соответствующий текст, найденный с помощью инкрементального и не инкрементального поиска по истории. .TP \fBenable\-bracketed\-paste (On)\fP Если установлено значение \fBOn\fP, то \fBreadline\fP настраивает терминал на вставку каждой вставки в буфер редактирования в виде отдельной строки символов, вместо того чтобы обрабатывать каждый символ так, как если бы он был прочитан с клавиатуры. Это называется "режим вставки в квадратных скобках" \fIbracketed\-paste mode\fP; он предотвращает выполнение \fBreadline\fP любых команд редактирования, связанных с последовательностями клавиш, появляющимися во вставленном тексте. .TP \fBenable\-keypad (Off)\fP Если установлено значение \fBOn\fP, то \fBreadline\fP пытается включить клавиатуру приложения при его вызове. В некоторых системах это необходимо для включения клавиш со стрелками. .TP \fBenable\-meta\-key (On)\fP Если установлено значение \fBOn\fP, то \fBreadline\fP пытается включить любую клавишу мета\-модификатор, которая, как утверждается, поддерживается терминалом. На многих терминалах мета\-клавиша используется для отправки восьмибитных символов; эта переменная проверяет возможности терминала, что указывает на то, что терминал может включать и отключать режим, который устанавливает восьмой бит символа (0200), если мета\-клавиша удерживается нажатой при вводе символа (метасимвол). .TP \fBexpand\-tilde (Off)\fP Если задано значение \fBOn\fP, то \fBreadline\fP выполняет расширение тильды при попытке завершения слова. .TP \fBforce\-meta\-prefix (Off)\fP Если установлено значение \fBOn\fP, то \fBreadline\fP изменяет свое поведение при привязке клавишных последовательностей, содержащих \eM\- или Meta\- (смотрите подраздел \fBПривязки клавиш\fP выше), преобразуя клавишную последовательность вида \eM\-\fIC\fP или Meta\-\fIC\fP в две последовательность символов \fBESC\fP \fIC\fP (добавление префикса meta). Если для \fBforce\-meta\-prefix\fP задано значение \fBOff\fP (по умолчанию), то \fBreadline\fP использует значение переменной \fBconvert\-meta\fP для того, чтобы определить, следует ли выполнять это преобразование: если для \fBconvert\-meta\fP задано значение \fBOn\fP, то \fBreadline\fP выполняет преобразование, описанное выше; если это \fBOff\fP, то \fBreadline\fP преобразует \fIC\fP в метасимвол, устанавливая восьмой бит (0200). .TP \fBhistory\-preserve\-point (Off)\fP Если установлено значение \fBOn\fP, то код истории пытается поместить точку в одно и то же место в каждой строке истории, полученной с помощью \fBprevious\-history\fP или \fBnext\-history\fP. .TP \fBhistory\-size (unset)\fP Задаёт максимальное количество записей истории, сохраняемых в списке истории. Если задано нулевое значение, то все существующие записи истории удаляются, а новые записи не сохраняются. Если задано значение меньше нуля, то количество записей истории не ограничено. По умолчанию \fBbash\fP устанавливает максимальное количество записей истории в значение переменной оболочки \fBHISTSIZE\fP. Если присвоить \fIhistory\-size\fP нечисловое значение, то максимальное количество записей истории будет равно 500. .TP \fBhorizontal\-scroll\-mode (Off)\fP Установка для этой переменной значения \fBOn\fP заставляет \fBreadline\fP использовать для отображения одну строку, прокручивая вводимые данные по горизонтали на одной строке экрана, когда их длина становится больше ширины экрана не переходя на новую строку. Эта настройка автоматически включается для терминалов высотой 1. .TP \fBinput\-meta (Off)\fP Если установлено значение \fBOn\fP, то \fBreadline\fP разрешает восьмибитный ввод (то есть не очищает восьмой бит в считываемых символах), независимо от того, что, по утверждению терминала, он может поддерживать. Значение по умолчанию \- \fIOff\fP, но \fBreadline\fP устанавливает значение \fIOn\fP, если локаль содержит символы, кодировки которых могут включать байты с установленным восьмым разрядом. Эта переменная зависит от категории локали \fBLC_CTYPE\fP и ее значение может меняться при изменении локали. Название \fBmeta\-flag\fP является синонимом \fBinput\-meta\fP. .TP \fBisearch\-terminators\ (\fP .Q \fBC\-[C\-j\fP \fB)\fP Строка символов, которая должна завершать инкрементальный поиск без последующего выполнения символа в качестве команды. Если этой переменной не было присвоено значение, то символы \fIESC\fP и \fBC\-j\fP завершают инкрементальный поиск. .TP \fBkeymap (emacs)\fP Устанавливает текущую комбинацию клавиш \fBreadline\fP. Допустимыми названиями комбинаций клавиш могут быть \fIemacs, emacs\-standard, emacs\-meta, emacs\-ctlx, vi, vi\-command\fP и \fIvi\-insert\fP; \fIemacs\fP эквивалентно \fIemacs\-standard\fP. Значение по умолчанию \- \fIemacs\fP; значение "Режим редактирования" \fBediting\-mode\fPтакже влияет на раскладку клавиш по умолчанию. .TP \fBkeyseq\-timeout (500)\fP Указывает время, в течение которого \fBreadline\fP будет ожидать символ при считывании неоднозначной последовательности клавиш (которая может сформировать полную последовательность клавиш, используя уже прочитанные входные данные или может потребовать дополнительного ввода для завершения более длинной последовательности клавиш). Если \fBreadline\fP не получает никаких входных данных в течение тайм\-аута, то она использует более короткую, но полную последовательность клавиш. Значение указывается в миллисекундах, поэтому значение 1000 означает, что \fBreadline\fP будет ждать дополнительного ввода в течение одной секунды. Если для этой переменной задано значение, меньшее или равное нулю или нечисловое значение, то \fBreadline\fP ожидает нажатия другой клавиши, чтобы решить, какую последовательность клавиш следует выполнить. .TP \fBmark\-directories (On)\fP Если задано значение \fBOn\fP, то к окончанию названий каталогов добавляется косая черта. .TP \fBmark\-modified\-lines (Off)\fP Если установлено значение \fBOn\fP, то \fBreadline\fP отображает строки журнала, которые были изменены, с предшествующей звездочкой (\fB*\fP). .TP \fBmark\-symlinked\-directories (Off)\fP Если задано значение \fBOn\fP, то к завершенным названиям, которые являются символическими ссылками на каталоги, добавляется косая черта, в зависимости от значения \fBmark\-directories\fP. .TP \fBmatch\-hidden\-files (On)\fP Эта переменная, если ей присвоено значение \fBOn\fP, заставляет \fBreadline\fP сопоставлять файлы, названия которых начинаются с .Q . (скрытые файлы) при заполнении названия файла. Если установлено значение \fBOff\fP, то пользователь должен указать начальную .Q . в названии файла, которое должно быть заполнено. .TP \fBmenu\-complete\-display\-prefix (Off)\fP Если установлено значение \fBOn\fP, то при завершении в меню отображается общий префикс списка возможных завершений (который может быть пустым) перед циклическим просмотром списка. .TP \fBoutput\-meta (Off)\fP Если задано значение \fBOn\fP, то \fBreadline\fP отображает символы с установленным восьмым разрядом напрямую, а не в виде escape\-последовательности с мета\-префиксом. Значение по умолчанию \- \fIOff\fP, но \fBreadline\fP устанавливает значение \fIOn\fP, если локаль содержит символы, кодировки которых могут включать байты с установленным восьмым разрядом. Эта переменная зависит от категории локали \fBLC_CTYPE\fP и ее значение может измениться при изменении локали. .TP \fBpage\-completions (On)\fP Если установлено значение \fBOn\fP, то \fBreadline\fP использует внутренний пейджер, похожий на \fImore\fP(1), для одновременного отображения экрана, полного возможных завершений. .TP \fBprefer\-visible\-bell\fP Смотрите \fBbell\-style\fP. .TP \fBprint\-completions\-horizontally (Off)\fP Если установлено значение \fBOn\fP, то \fBreadline\fP отображает завершения с совпадениями, отсортированными по горизонтали в алфавитном порядке, а не вниз по экрану. .TP \fBrevert\-all\-at\-newline (Off)\fP Если установлено значение \fBOn\fP, то \fBreadline\fP отменит все изменения в строках истории, прежде чем вернуться при выполнении \fBaccept\-line\fP. По умолчанию строки истории могут быть изменены и сохранены в отдельных списках отмены при вызовах \fBreadline\fP. .TP \fBsearch\-ignore\-case (Off)\fP Если установлено значение \fBOn\fP, то \fBreadline\fP выполняет инкрементный и неинкрементный поиски по списку истории без учета регистра. .TP \fBshow\-all\-if\-ambiguous (Off)\fP Это изменяет поведение функций завершения по умолчанию. Если задано значение \fBOn\fP, то слова, которые имеют более одного возможного завершения, сразу же отображаются в списке совпадений, а не выдается звонок колокольчика. .TP \fBshow\-all\-if\-unmodified (Off)\fP Это изменяет поведение функций завершения по умолчанию аналогично \fBshow\-all\-if\-ambiguous\fP. Если задано значение \fBOn\fP, то слова, которые имеют более одного возможного завершения без какого\-либо возможного частичного завершения (возможные завершения не имеют общего префикса), то они сразу же отображаются в списке совпадений, а не вызывают звонок колокольчика. .TP \fBshow\-mode\-in\-prompt (Off)\fP Если задано значение \fBOn\fP, то добавляется в начало запроса строка, указывающая режим редактирования: emacs, команда или вставка vi. Строки режима могут быть заданы пользователем (например, \fIemacs\-mode\-string\fP). .TP \fBskip\-completed\-text (Off)\fP Если задано значение \fBOn\fP, то это изменяет поведение завершения по умолчанию при вставке одного совпадения в строку. Оно активно только при выполнении завершения в середине слова. Если включено, то \fBreadline\fP не вставляет символы завершения, которые соответствуют символам после точки в завершаемом слове, поэтому части слова, следующие за курсором, не дублируются. .TP \fBvi\-cmd\-mode\-string ((cmd))\fP Если включена переменная \fIshow\-mode\-in\-prompt\fP, то эта строка отображается непосредственно перед последней строкой основного приглашения, когда включен режим редактирования vi и в командном режиме. Значение раскрывается как привязка к клавише, поэтому доступен стандартный набор мета\- и управляющих префиксов, а также escape\-последовательностей с обратной косой чертой. Символы \e1 и \e2 являются начальными и конечными последовательностями непечатаемых символов, которые могут быть использованы для встраивания последовательности управления терминалом в строку режима. .TP \fBvi\-ins\-mode\-string ((ins))\fP Если включена переменная \fIshow\-mode\-in\-prompt\fP, то эта строка отображается непосредственно перед последней строкой основного приглашения, когда включен режим редактирования vi в режиме вставки. Значение раскрывается как привязка к клавише, поэтому доступен стандартный набор мета\- и управляющих префиксов, а также escape\-последовательностей с обратной косой чертой. Символы \e1 и \e2 являются начальными и конечными последовательностями непечатаемых символов, которые могут быть использованы для встраивания последовательности управления терминалом в строку режима. .TP \fBvisible\-stats (Off)\fP Если задано значение \fBOn\fP, то при выводе возможных дополнений к названию файла добавляется символ, обозначающий тип файла, как указано в \fIstat\fP(2). .PD .SS "Конструкции условий Readline" В библиотеке \fBReadline\fP реализована функция, схожая по смыслу с функциями условной компиляции препроцессора Cи, которая позволяет выполнять привязку клавиш и настройки переменных в результате тестов. Доступны четыре директивы синтаксического анализа. .TP \fB$if\fP Конструкция \fB$if\fP позволяет создавать привязки в зависимости от режима редактирования, используемого терминала или приложения, использующего \fBreadline\fP. Текст теста после любого оператора сравнения продолжается до конца строки; если не указано иное, для его выделения не требуется никаких символов. .RS .TP \fBmode\fP Формат \fBmode=\fP директивы \fB$if\fP используется для проверки того, находится ли \fBreadline\fP в режиме emacs или vi. Это можно использовать в сочетании с командой \fBset keymap\fP, например, для установки привязок в раскладках \fIemacs\-standard\fP и \fIemacs\-ctlx\fP, только если \fBreadline\fP запускается в режиме emacs. .TP \fBterm\fP Формат \fBterm=\fP может использоваться для включения привязок клавиш, специфичных для терминала, возможно, для привязки последовательностей клавиш, выводимых функциональными клавишами терминала. Слово, указанное справа от буквы \fB=\fP, проверяется как на соответствие полному названию терминала, так и на соответствие части названия терминала перед первой буквой \fB\-\fP. Это позволяет, например, \fIxterm\fP сопоставлять как \fIxterm\fP, так и \fIxterm\-256color\fP. .TP \fBversion\fP Тест \fBversion\fP может использоваться для сравнения с конкретными версиями \fBreadline\fP. \fBversion\fP расширяется до текущей версии \fBreadline\fP. Набор операторов сравнения включает в себя \fB=\fP, (и \fB==\fP), \fB!=\fP, \fB<=\fP, \fB>=\fP, \fB<\fP и \fB>\fP. Номер версии, указанный справа от оператора, состоит из основного номера версии, необязательной десятичной точки и необязательной дополнительной версии (например, \fB7.1\fP). Если дополнительная версия не указана, то по умолчанию используется значение \fB0\fP. Оператор может быть отделен от строки \fBversion\fP и от аргумента номера версии пробелом. .TP \fIapplication\fP Конструкция \fIapplication\fP используется для включения настроек, относящихся к конкретному приложению. Каждая программа, использующая библиотеку \fBreadline\fP, устанавливает \fIapplication name\fP и в файле инициализации можно проверять наличие определенного значения. Это может быть использовано для привязки последовательности клавиш к функциям, используемым конкретной программой. Например, следующая команда добавляет последовательность клавиш, которая заключает текущее или предыдущее слово в кавычки в \fBbash\fP: .PP .RS .EX .nf \fB$if\fP Bash # Процитировать текущее или предыдущее слово \*"\eC\-xq\*": \*"\eeb\e\*"\eef\e\*"\*" \fB$endif\fP .fi .EE .RE .TP \fIvariable\fP Конструкция \fIvariable\fP предоставляет простые тесты на равенство для переменных и значений для библиотеки \fBreadline\fP. Допустимыми операторами сравнения являются \fI=\fP, \fI==\fP и \fI!=\fP. Название переменной должно быть отделено от оператора сравнения пробелом; оператор может быть отделен от значения справа пробелом. Могут быть проверены строковые и логические переменные. Логические переменные должны быть проверены на соответствие значениям "да" \fIon\fP и "нет" \fIoff\fP. .RE .TP \fB$else\fP Команды в этой ветви директивы \fB$if\fP выполняются в случае сбоя теста. .TP \fB$endif\fP Эта команда, как видно из предыдущего примера, завершает выполнение команды \fB$if\fP. .TP \fB$include\fP Эта директива принимает в качестве аргумента одно название файла и считывает команды и привязки клавиш из этого файла. Например, следующая директива будет выглядеть следующим образом .FN /etc/inputrc : .PP .RS .nf \fB$include\fP \^ \fI/etc/inputrc\fP .fi .RE .SS Поиск Библиотека \fBReadline\fP предоставляет команды для поиска строк, содержащих указанную строку, в истории команд (смотрите ниже раздел .SM \fBИСТОРИЯ\fP). Существует два режима поиска: инкрементальный \fIincremental\fP и не инкрементальный \fInon\-incremental\fP. .PP Инкрементальный поиск начинается до того, как пользователь закончит вводить строку поиска. По мере ввода каждого символа в строке поиска \fBreadline\fP отображает следующую запись из истории, соответствующую введенной строке. Для инкрементального поиска требуется ровно столько символов, сколько необходимо для поиска нужной записи в истории. При использовании режима редактирования emacs введите \fBC\-r\fP, чтобы выполнить поиск в истории в обратном направлении в поисках определенной строки. При вводе \fBC\-s\fP выполняется поиск в истории в прямом (вперёд) направлении. Символы, присутствующие в значении переменной \fBisearch\-terminators\fP, используются для завершения инкрементального поиска. Если этой переменной не было присвоено значение, то \fIESC\fP и \fBC\-j\fP завершают инкрементальный поиск. \fBC\-g\fP прерывает инкрементальный поиск и восстанавливает исходную строку. Когда поиск завершается, запись журнала, содержащая строку поиска, становится текущей строкой. .PP Чтобы найти другие совпадающие записи в списке истории, введите \fBC\-r\fP или \fBC\-s\fP, соответственно. При этом выполняется поиск в истории в обратном или прямом направлениях в поисках следующей записи, соответствующей введенной строке поиска. Любая другая последовательность клавиш, связанная с командой терминала \fBreadline\fP, завершает поиск и выполняет эту команду. Например, новая строка завершает поиск и принимает строку, тем самым выполняя команду из списка истории. Команда перемещения завершит поиск, сделает последнюю найденную строку текущей и начнет редактирование. .PP \fBReadline\fP запоминает последнюю строку инкрементального поиска. Если две строки \fBC\-r\fP вводятся без каких\-либо промежуточных символов, определяющих новую строку поиска, то \fBreadline\fP использует любую запомненную строку поиска. .PP При не инкрементальном поиске строка поиска считывается целиком, прежде чем начать поиск совпадающих записей в истории. Строка поиска может быть введена пользователем или быть частью содержимого текущей строки. .SS "Названия команд Readline" Ниже приведен список названий команд и последовательности клавиш по умолчанию, к которым они привязаны. Названия команд без соответствующей последовательности клавиш по умолчанию не привязаны. .PP В следующих описаниях "точка" \fIpoint\fP обозначает текущее положение курсора, а "метка" \fImark\fP \- положение курсора, сохраненное командой \fBset\-mark\fP. Текст между точкой и меткой называется областью \fIregion\fP. В \fBReadline\fP есть концепция активной области \fIactive region\fP: когда область активна, тогда \fBreadline\fP повторно отображает область, используя значение переменной \fBactive\-region\-start\-color\fP. Переменная \fBreadline\fP \fBenable\-active\-region\fP включает и выключает эту переменную. Несколько команд устанавливают область в активное состояние; они описаны ниже. .SS "Команды перемещения" .PD 0 .TP \fBbeginning\-of\-line (C\-a)\fP Перейти к началу текущей строки. На некоторых клавиатурах это также может быть связано с клавишей Home. .TP \fBend\-of\-line (C\-e)\fP Перейти к концу строки. На некоторых клавиатурах это также может быть связано с клавишей End. .TP \fBforward\-char (C\-f)\fP Переместить символ вперед. На некоторых клавиатурах это также может быть связано с клавишей со стрелкой вправо. .TP \fBbackward\-char (C\-b)\fP Переместить символ назад. На некоторых клавиатурах это также может быть связано с клавишей со стрелкой влево. .TP \fBforward\-word (M\-f)\fP Перейти к концу следующего слова. Слова состоят из буквенно\-цифровых символов (букв и цифр). .TP \fBbackward\-word (M\-b)\fP Вернуться к началу текущего или предыдущего слова. Слова состоят из буквенно\-цифровых символов (букв и цифр). .TP \fBshell\-forward\-word (M\-C\-f)\fP Перейти к концу следующего слова. Слова разделяются метасимволами, не заключенными в кавычки. .TP \fBshell\-backward\-word (M\-C\-b)\fP Вернуться к началу текущего или предыдущего слова. Слова разделяются метасимволами оболочки, не заключенными в кавычки. .TP \fBprevious\-screen\-line\fP Попытаться переместить точку в тот же столбец физического экрана в предыдущей строке физического экрана. Это не даст желаемого эффекта, если текущая строка \fBreadline\fP занимает не более одной физической строки или если точка не превышает длину приглашения плюс ширину экрана. .TP \fBnext\-screen\-line\fP Попытаться переместить точку в тот же столбец физического экрана в следующей строке физического экрана. Это не даст желаемого эффекта, если текущая строка \fBreadline\fP занимает не более одной физической строки или если длина текущей строки \fBreadline\fP не превышает длину приглашения плюс ширина экрана. .TP \fBclear\-display (M\-C\-l)\fP Очистить экран и, если возможно, буфер обратной прокрутки терминала, затем перечертить текущую строку, оставив текущую строку в верхней части экрана. .TP \fBclear\-screen (C\-l)\fP Очистить экран, затем переместить текущую строку, оставив ее в верхней части экрана. Используя числовой аргумент, обновить текущую строку, не очищая экран. .TP \fBredraw\-current\-line\fP Обновить текущую строку. .PD .SS "Команды управления историей" .PD 0 .TP \fBaccept\-line (Newline, Return)\fP Принимать строку независимо от того, где находится курсор. Если эта строка непустая, то добавить ее в список истории в соответствии с состоянием переменных .SM \fBHISTCONTROL\fP и \fBHISTIGNORE\fP. Если строка является измененной строкой истории, то восстановить ее в исходном состоянии. .TP \fBprevious\-history (C\-p)\fP Извлекать предыдущую команду из списка истории, перемещаясь назад по списку. Это также может быть связано с клавишей со стрелкой вверх на некоторых клавиатурах. .TP \fBnext\-history (C\-n)\fP Извлечь следующую команду из списка истории, продвигаясь по списку вперед. Это также может быть связано с клавишей со стрелкой вниз на некоторых клавиатурах. .TP \fBbeginning\-of\-history (M\-<)\fP Перейти на первую строку в истории. .TP \fBend\-of\-history (M\->)\fP Перейти к концу истории ввода, т.е. к строке, которая вводится в данный момент. .TP \fBoperate\-and\-get\-next (C\-o)\fP Принимать текущую строку для выполнения, как если бы была введена новая строка и извлекать следующую строку относительно текущей строки из журнала для редактирования. Числовой аргумент, если он указан, указывает, какую запись журнала следует использовать вместо текущей строки. .TP \fBfetch\-history\fP Используя числовой аргумент, извлечь эту запись из списка истории и сделать ее текущей строкой. Когда аргумент не определён, тогда вернуться к первой записи в списке истории. .TP \fBreverse\-search\-history (C\-r)\fP Искать в обратном направлении, начиная с текущей строки и двигаясь .Q up по списку истории по мере необходимости. Это пошаговый поиск. Эта команда устанавливает область в соответствии с соответствующим текстом и активирует область. .TP \fBforward\-search\-history (C\-s)\fP Искать вперед, начиная с текущей строки и двигаясь .Q down по списку истории по мере необходимости. Это пошаговый поиск. Эта команда устанавливает область в соответствии с соответствующим текстом и активирует область. .TP \fBnon\-incremental\-reverse\-search\-history (M\-p)\fP Искать назад по списку истории, начиная с текущей строки, используя неинкрементный поиск по строке, предоставленной пользователем. Строка поиска может совпадать с любым местом в строке истории. .TP \fBnon\-incremental\-forward\-search\-history (M\-n)\fP Искать вперёд по списку истории, используя не инкрементальный поиск по строке, предоставленной пользователем. Строка поиска может совпадать с любым местом в строке истории. .TP \fBhistory\-search\-backward\fP Искать назад по списку истории в поисках последовательности символов между началом текущей строки и точкой. Строка поиска должна совпадать с началом строки истории. Это не инкрементальный поиск. Это может быть связано с нажатием клавиши Page Up key ("Открыть страницу") на некоторых клавиатурах. .TP \fBhistory\-search\-forward\fP Искать по списку истории в поисках последовательности символов между началом текущей строки и точкой. Строка поиска должна совпадать с началом строки истории. Это не инкрементальный поиск. На некоторых клавиатурах это может быть связано с нажатием клавиши Page Down ("Перелистывание страницы вниз"). .TP \fBhistory\-substring\-search\-backward\fP Искать в списке истории назад в поисках последовательности символов между началом текущей строки и точкой. Строка поиска может совпадать с любым местом в строке истории. Это не инкрементальный поиск. .TP \fBhistory\-substring\-search\-forward\fP Выполнить поиск вперед по истории в поисках последовательности символов между началом текущей строки и точкой. Строка поиска может совпадать с любым местом в строке истории. Это не инкрементальный поиск. .TP \fByank\-nth\-arg (M\-C\-y)\fP Вставить первый аргумент предыдущей команды (обычно второе слово в предыдущей строке) в точку. С аргументом \fIn\fP вставьте \fIn\fP\-е слово из предыдущей команды (слова в предыдущей команде начинаются со слова 0). Отрицательный аргумент вставляет \fIn\fP\-е слово из конца предыдущей команды. Как только аргумент \fIn\fP вычислен, для извлечения \fIn\fP\-го слова используются средства расширения истории, как если бы .Q !\fIn\fP расширение истории было задано заранее. .TP \fByank\-last\-arg (M\-.\^, M\-_\^)\fP Вставить последний аргумент в предыдущую команду (последнее слово предыдущей записи в истории). С числовым аргументом ведёт себя точно так же, как с \fByank\-nth\-arg\fP. Последовательные вызовы \fByank\-last\-arg\fP перемещают назад по списку истории, по очереди вставляя последнее слово (или слово, указанное аргументом для первого вызова) из каждой строки. Любой числовой аргумент, передаваемый этим последовательным вызовам, определяет направление перемещения по истории. Отрицательный аргумент переключает направление перемещения по истории (назад или вперед). При этом используются средства расширения истории для извлечения последнего слова, как если бы .Q !$ расширение истории было задано заранее. .TP \fBshell\-expand\-line (M\-C\-e)\fP Расширение слов выполнялось в оболочке. При этом выполняется расширение псевдонима и истории, используются кавычки \fB$\fP\*'\fIstring\fP\*' и \fB$\fP\*"\fIstring\fP\*", расширение тильды, расширение параметров и переменных, арифметическое расширение, замена команд и процессов, разделение слов и удаление кавычек. Явный аргумент запрещает замену команд и процессов. Описание расширения истории смотрите в разделе .SM \fBРАСШИРЕНИЕ ИСТОРИИ\fP ниже. .TP \fBhistory\-expand\-line (M\-\*^)\fP Выполнить расширение истории в текущей строке. Описание расширения истории смотрите в разделе .SM \fBРАСШИРЕНИЕ ИСТОРИИ\fP ниже. .TP \fBmagic\-space\fP Выполнить расширение истории в текущей строке и вставить пробел. Описание расширения истории смотрите в разделе .SM \fBРАСШИРЕНИЕ ИСТОРИИ\fP ниже. .TP \fBalias\-expand\-line\fP Выполнить расширение псевдонима в текущей строке. Описание расширения псевдонима приведено в разделе .SM \fBПСЕВДОНИМЫ\fP выше. .TP \fBhistory\-and\-alias\-expand\-line\fP Выполнить расширение истории и псевдонима в текущей строке. .TP \fBinsert\-last\-argument (M\-.\^, M\-_\^)\fP Синоним для \fByank\-last\-arg\fP. .TP \fBedit\-and\-execute\-command (C\-x C\-e)\fP Вызвать редактор в текущей командной строке и выполнить результат в виде команд оболочки. \fBBash\fP пытается вызвать .SM \fB$VISUAL\fP, .SM \fB$EDITOR\fP и \fIemacs\fP в качестве редактора в указанном порядке. .PD .SS "Команды изменения текста" .PD 0 .TP \fIend\-of\-file\fP\fB (usually C\-d)\fP Символ, обозначающий конец файла, заданный, например, с помощью \fIstty\fP(1). Если этот символ считывается, когда в строке нет символов, а точка находится в начале строки, то \fBreadline\fP интерпретирует его как конец ввода и возвращает .SM \fBEOF\fP. .TP \fBdelete\-char (C\-d)\fP Удалить символ в точке. Если эта функция привязана к тому же символу, что и символ tty \fBEOF\fP, как это обычно бывает с \fBC\-d\fP, то смотрите выше, чтобы узнать об эффектах. Это также может быть связано с клавишей Delete на некоторых клавиатурах. .TP \fBbackward\-delete\-char (Rubout)\fP Удалить символ, находящийся за курсором. Если задан числовой аргумент, то сохранить удаленный текст в кольце удаления. .TP \fBforward\-backward\-delete\-char\fP Удалить символ под курсором, если только курсор не находится в конце строки, в этом случае символ, расположенный за курсором, будет удален. .TP \fBquoted\-insert (C\-q, C\-v)\fP Добавить следующий введенный символ в строку буквально. Вот как, например, вставлять такие символы, как \fBC\-q\fP. .TP \fBtab\-insert (C\-v TAB)\fP Вставить символ табуляции. .TP \fBself\-insert (a, b, A, 1, !, \fP.\|.\|.\fB)\fP Вставить введенный символ. .TP \fBbracketed\-paste\-begin\fP Эта функция предназначена для привязки к .Q "bracketed paste" escape\-последовательности, отправляемой некоторыми терминалами и такая привязка назначается по умолчанию. Это позволяет \fBreadline\fP вставлять текст как единое целое, не обрабатывая каждый символ так, как если бы он был прочитан с клавиатуры. Вставленные символы вставляются так, как если бы каждый из них был привязан к самостоятельной вставке \fBself\-insert\fP вместо выполнения каких\-либо команд редактирования. .IP Вставка в квадратных скобках устанавливает область в соответствии со вставленным текстом и активирует эту область. .TP \fBtranspose\-chars (C\-t)\fP Перетащить символ перед точкой вперед по символу в точке, также перемещая точку вперед. Если точка находится в конце строки, то это перемещает два символа перед точкой. Отрицательные аргументы не действуют. .TP \fBtranspose\-words (M\-t)\fP Перетащить слово перед точкой за слово после точки, перемещая точку также за это слово. Если точка находится в конце строки, то это перемещает последние два слова в строке. .TP \fBshell\-transpose\-words (M\-C\-t)\fP Перетащить слово перед точкой за слово после точки, перемещая точку также и за это слово. Если точка вставки находится в конце строки, это перемещает последние два слова в строке. Границы слов такие же, как у \fBshell\-forward\-word\fP и \fBshell\-backward\-word\fP. .TP \fBupcase\-word (M\-u)\fP Ввести текущее (или следующее) слово в верхнем регистре. Если аргумент отрицательный, то ввести предыдущее слово в верхнем регистре, но не перемещать точку. .TP \fBdowncase\-word (M\-l)\fP Ввести текущее (или следующее) слово в нижнем регистре. Если аргумент отрицательный, то ввести предыдущее слово в нижнем регистре, но не перемещать точку. .TP \fBcapitalize\-word (M\-c)\fP Указать текущее (или следующее) слово с заглавной буквы. При отрицательном аргументе указать предыдущее слово с заглавной буквы, но не перемещать точку. .TP \fBoverwrite\-mode\fP Переключить режим перезаписи. При явном положительном числовом аргументе переключится в режим перезаписи. При явном отрицательном числовом аргументе переключится в режим вставки. Эта команда влияет только на режим \fBemacs\fP; В режиме \fBvi\fP перезапись выполняется по\-другому. Каждый вызов \fIreadline()\fP начинается в режиме вставки. .IP В режиме перезаписи символы, связанные с \fBself\-insert\fP, заменяют текст в точке, а не сдвигают текст вправо. Символы, связанные с \fBbackward\-delete\-char\fP, заменяют символ перед точкой на пробел. По умолчанию эта команда не привязана, но может быть привязана к клавише "Insert" на некоторых клавиатурах. .PD .SS "Уничтожение и выдёргивание" .PD 0 .TP \fBkill\-line (C\-k)\fP Уничтожить текст от точки до конца текущей строки. Используя числовой аргумент с отрицательным значением, уничтожить текст в обратном направлении от курсора к началу строки. .TP \fBbackward\-kill\-line (C\-x Rubout)\fP Уничтожить в обратном порядке, с самого начала текущей строки. С отрицательным числовым аргументом уничтожить вперед от курсора к концу строки. .TP \fBunix\-line\-discard (C\-u)\fP .\" There is no real difference between this and backward-kill-line Уничтожить в обратном порядке от точки к началу строки, сохраняя уничтоженный текст в кольце удаления. .TP \fBkill\-whole\-line\fP Уничтожить все символы в текущей строке, независимо от того, где находится точка. .TP \fBkill\-word (M\-d)\fP Удалить от точки до конца текущего слова или, если между словами, то до конца следующего слова. Границы слов совпадают с теми, которые используются в \fBforward\-word\fP. .TP \fBbackward\-kill\-word (M\-Rubout)\fP Удалить слово, стоящее за точкой. Границы слов совпадают с теми, которые используются в \fBbackward\-word\fP. .TP \fBshell\-kill\-word (M\-C\-d)\fP Удалить от точки до конца текущего слова или, если между словами, то до конца следующего слова. Границы слов совпадают с теми, которые используются в \fBshell\-forward\-word\fP. .TP \fBshell\-backward\-kill\-word\fP Удалить слово, стоящее за точкой. Границы слов совпадают с теми, которые используются в \fBshell\-backward\-word\fP. .TP \fBunix\-word\-rubout (C\-w)\fP Уничтожить слово за точкой, используя пробел в качестве границы слова, сохранив уничтоженный текст в кольце удаления. .TP \fBunix\-filename\-rubout\fP Удалить слово за точкой, используя пробел и символ косой черты в качестве границ слова, сохранив уничтоженный текст в кольце удаления. .TP \fBdelete\-horizontal\-space (M\-\e)\fP Удалить все пробелы и знаки табуляции вокруг точки. .TP \fBkill\-region\fP Удалить текст в текущей области. .TP \fBcopy\-region\-as\-kill\fP Скопировать текст из этой области в буфер удаления, чтобы его можно было немедленно извлечь. .TP \fBcopy\-backward\-word\fP Скопировать слово перед точкой в буфер удаления. Границы слов совпадают с \fBbackward\-word\fP. .TP \fBcopy\-forward\-word\fP Скопировать слово, следующее за точкой, в буфер удаления. Границы слов такие же, как и в \fBforward\-word\fP. .TP \fByank (C\-y)\fP Извлечь верхнюю часть из кольца удалённых в буфере около точки. .TP \fByank\-pop (M\-y)\fP Повернуть кольцо удалённых и извлечь новый верх. Работает только после \fByank\fP или \fByank\-pop\fP. .PD .SS "Числовые аргументы" .PD 0 .TP \fBdigit\-argument (M\-0, M\-1, \fP.\|.\|.\fB, M\-\-)\fP Добавить эту цифру к уже имеющемуся аргументу или определить новый аргумент. M \- определяет отрицательный аргумент. .TP \fBuniversal\-argument\fP Это еще один способ указать аргумент. Если за командой \fBuniversal\-argument\fP следует одна или несколько цифр, с необязательным начальным знаком минус, то эти цифры определяют аргумент. Если за командой \fBuniversal\-argument\fP следуют цифры, то выполнение снова заканчивается числовым аргументом, иначе игнорируется. В качестве специального случая, если за этой командой сразу следует символ, который не является ни цифрой, ни знаком минус, то количество аргументов для следующей команды умножается на четыре. Изначально количество аргументов равно единице, поэтому при выполнении этой функции в первый раз количество аргументов увеличивается на четыре, во второй раз количество аргументов увеличивается до шестнадцати и так далее. .PD .SS Завершение .PD 0 .TP \fBcomplete (TAB)\fP Попытаться выполнить заполнение текста перед точкой. \fBBash\fP пытается завершить, сначала проверяя наличие каких\-либо программируемых завершений для командного слова (смотрите подраздел \fBПрограммируемое завершение\fP ниже), в противном случае обрабатывает текст как переменную (если текст начинается с \fB$\fP), название пользователя (если текст начинается с \fB\*~\fP)., названия хоста (если текст начинается с \fB@\fP) или команды (включая псевдонимы, функции и встроенные команды) по очереди. Если ни один из них не приводит к совпадению, то выполняется возврат к завершению названия файла. .TP \fBpossible\-completions (M\-?)\fP Вывести список возможные дополнения к тексту перед точкой. При отображении завершений \fBreadline\fP устанавливает количество столбцов, используемых для отображения, равным значению \fBcompletion\-display\-width\fP, значению переменной оболочки .SM \fBCOLUMNS\fP или ширине экрана, в указанном порядке. .TP \fBinsert\-completions (M\-*)\fP Вставить все дополнения к тексту перед точкой, которые были бы сгенерированы с помощью \fBpossible\-completions\fP, разделив их пробелом. .TP \fBmenu\-complete\fP Аналогично \fBcomplete\fP, но заменяет слово, которое необходимо завершить, одним совпадением из списка возможных завершений. Повторное выполнение шагов \fBmenu\-complete\fP по списку возможных завершений, вставляя каждое совпадение по очереди. В конце списка завершений клавиша \fBmenu\-complete\fP нажимает клавишу звонка (в зависимости от настройки \fBbell\-style\fP) и восстанавливает исходный текст. Аргумент \fIn\fP перемещает на \fIn\fP позиций в списке совпадений вперед; отрицательный аргумент перемещает их назад по списку. Эта команда предназначена для привязки к клавише \fBTAB\fP, но по умолчанию не привязана. .TP \fBmenu\-complete\-backward\fP Идентична \fBmenu\-complete\fP, но перемещает назад по списку возможных вариантов завершения, как если бы для \fBmenu\-complete\fP был задан отрицательный аргумент. По умолчанию эта команда не привязана. .TP \fBexport\-completions\fP Выполнить заполнение слова перед точкой, как описано выше и записать список возможных завершений в выходной поток \fBreadline\fP, используя следующий формат и записывая информацию в отдельных строках: .RS .PD .IP \(bu .PD 0 количество совпадений \fIN\fP; .IP \(bu завершаемое слово; .IP \(bu \fIS\fP:\fIE\fP, когда \fIS\fP и \fIE\fP являются начальным и конечным смещениями слова в буфере строк \fBreadline\fP; затем .IP \(bu каждое совпадение, по одному на строку .RE .PD .IP Если совпадений нет, то первая строка будет выглядеть следующим образом .Q 0 , и эта команда не выводит никаких выходных данных после \fIS\fP:\fIE\fP. Если есть только одно совпадение, то выводится единственная строка, содержащая его. Если имеется более одного совпадения, то в первой строке после \fIS\fP выводится общий префикс совпадений, который может быть пустым :\fIE\fP, затем совпадения в последующих строках. В этом случае \fIN\fP будет содержать первую строку с общим префиксом. .IP Пользователь или приложение должны иметь возможность использовать пустую строку. Цель состоит в том, чтобы пользователь или приложение считывали \fIN\fP строк после строки, содержащей \fIS\fP:\fIE\fP, чтобы получить список совпадений. По умолчанию эта команда не привязана. .TP \fBdelete\-char\-or\-list\fP Удалить символ под курсором, если он не находится в начале или конце строки (например, \fBdelete\-char\fP). В конце строки она ведет себя аналогично \fBpossible\-completions\fP. По умолчанию эта команда не привязана. .TP \fBcomplete\-filename (M\-/)\fP Попробывать ввести название файла в текст перед точкой. .TP \fBpossible\-filename\-completions (C\-x /)\fP Вывести возможные варианты завершения текста перед точкой, рассматривая его как название файла. .TP \fBcomplete\-username (M\-\*~)\fP Попытаться закончить текст перед точкой, рассматривая его как название пользователя. .TP \fBpossible\-username\-completions (C\-x \*~)\fP Показать возможные варианты окончания текста перед точкой, рассматривая его как название пользователя. .TP \fBcomplete\-variable (M\-$)\fP Попытаться завершить работу над текстом перед точкой, рассматривая его как переменную оболочки. .TP \fBpossible\-variable\-completions (C\-x $)\fP Показать возможные варианты завершения текста перед точкой, рассматривая его как переменную оболочки. .TP \fBcomplete\-hostname (M\-@)\fP Показать возможные варианты завершения текста перед точкой, рассматривая его как название хоста. .TP \fBpossible\-hostname\-completions (C\-x @)\fP Показать возможные варианты завершения текста перед точкой, рассматривая его как название хоста. .TP \fBcomplete\-command (M\-!)\fP Попытаться завершить текст перед точкой, рассматривая его как название команды. При завершении команды выполняется попытка сопоставления текста с псевдонимами, зарезервированными словами, функциями оболочки, встроенными элементами оболочки и, наконец, с названиями исполняемых файлов в указанном порядке. .TP \fBpossible\-command\-completions (C\-x !)\fP Показать возможные варианты завершения текста перед точкой, рассматривая его как название команды. .TP \fBdynamic\-complete\-history (M\-TAB)\fP Попытаться завершить текст перед точкой, сравнив текст с записями в списке истории на предмет возможных совпадений по завершению. .TP \fBdabbrev\-expand\fP Попробовать завершить меню с текстом перед точкой, сравнив текст со строками из списка истории на предмет возможного совпадения завершений. .TP \fBcomplete\-into\-braces (M\-{)\fP Выполнить заполнение названия файла и вставить список возможных вариантов, заключенный в фигурные скобки, чтобы список был доступен командной строке (смотрите подраздел \fBРасширение фигурных скобок\fP выше). .PD .SS "Макросы клавиатуры" .PD 0 .TP \fBstart\-kbd\-macro (C\-x (\^)\fP Начать сохранять символы, введенные в текущий макрос клавиатуры. .TP \fBend\-kbd\-macro (C\-x )\^)\fP Прекратить сохранять символы, введенные в текущий макрос клавиатуры и сохранить определение. .TP \fBcall\-last\-kbd\-macro (C\-x e)\fP Повторно выполнить последний определенный макрос клавиатуры, сделав так, чтобы символы в макросе отображались так, как если бы они были набраны с клавиатуры. .TP \fBprint\-last\-kbd\-macro ()\fP Вывести последний определенный макрос клавиатуры в формате, подходящем для файла \fIinputrc\fP. .PD .SS Разное .PD 0 .TP \fBre\-read\-init\-file (C\-x C\-r)\fP Прочитать содержимое файла \fIinputrc\fP и включить в него все найденные там привязки или назначения переменных. .TP \fBabort (C\-g)\fP Прервать текущую команду редактирования и выдать сигнал звонка на терминал (в соответствии с настройкой \fBbell\-style\fP). .TP \fBdo\-lowercase\-version (M\-A, M\-B, M\-\fP\fIx\fP\fB, \fP.\|.\|.\fB)\fP Если измененный символ \fIx\fP имеет верхний регистр, то выполнить команду, привязанную к соответствующему измененному символу нижнего регистра. Поведение не определено, если \fIx\fP уже имеет нижний регистр. .TP \fBprefix\-meta (ESC)\fP Преобразовать следующий введенный символ. .SM \fBESC\fP \fBf\fP, эквивалентно \fBMeta\-f\fP. .TP \fBundo (C\-_, C\-x C\-u)\fP Пошаговая отмена, запомненного отдельно для каждой строки. .TP \fBrevert\-line (M\-r)\fP Отменить все изменения, внесенные в эту строку. Это похоже на выполнение команды \fBundo\fP необходимое количество раз, чтобы вернуть строку в исходное состояние. .TP \fBtilde\-expand (M\-&)\fP Выполнить расширение тильдой текущего слова. .TP \fBset\-mark (C\-@, M\-)\fP Установить метку в точку. Если указан числовой аргумент, то установить метку в это положение. .TP \fBexchange\-point\-and\-mark (C\-x C\-x)\fP Заменить точку на метку. Установить текущее положение курсора на сохраненное, затем установить метку на прежнее положение курсора. .TP \fBcharacter\-search (C\-])\fP Прочитать символ и переместите указатель на следующее его появление. Отрицательный аргумент выполняет поиск предыдущих появлений. .TP \fBcharacter\-search\-backward (M\-C\-])\fP Прочитать символ и переместить указатель на предыдущее его использование. Отрицательный аргумент выполняет поиск последующих появлений. .TP \fBskip\-csi\-sequence\fP Прочитать достаточное количество символов, чтобы использовать последовательность из нескольких клавиш, например, определенную для таких клавиш, как Home и End. Последовательности CSI начинаются с индикатора контрольной последовательности (CSI), обычно \fIESC [\fP. Если эта последовательность привязана к .Q \ee[ , клавишам, создающим последовательности CSI, то не действуют, если они явно не привязаны к команде \fBreadline\fP, вместо того чтобы вставлять случайные символы в буфер редактирования. По умолчанию это не привязано, но обычно привязывается к \fIESC [\fP. .TP \fBinsert\-comment (M\-#)\fP Если без числового аргумента, то вставить значение переменной \fBreadline\fP \fBcomment\-begin\fP в начало текущей строки. Если указан числовой аргумент, то эта команда действует как переключатель: если символы в начале строки не соответствуют значению \fBcomment\-begin\fP, то вставить значение; в противном случае удалить символы в \fBcomment\-begin\fP из начала строки. В любом случае строка принимается так, как если бы была введена новая строка. Значение по умолчанию для \fBcomment\-begin\fP приводит к тому, что эта команда преобразует текущую строку в комментарий оболочки. Если числовой аргумент приводит к удалению символа комментария, то строка будет выполнена оболочкой. .TP \fBspell\-correct\-word (C\-x s)\fP Выполнить исправление орфографии в текущем слове, указав его в качестве каталога или названия файла, таким же образом, как опции \fBcdspell\fP оболочки. Границы слов совпадают с границами, используемыми в опции \fBshell\-forward\-word\fP. .TP \fBglob\-complete\-word (M\-g)\fP Рассматривать слово перед точкой как шаблон для расширения названия пути с неявным добавлением звездочки, затем использовать этот шаблон для создания списка совпадающих названий файлов для возможных завершений. .TP \fBglob\-expand\-word (C\-x *)\fP Использовать слово перед точкой как шаблон для расширения названия пути и вставить список совпадающих названий файлов, заменив это слово. Если указан числовой аргумент, то добавить символ \fB*\fP перед расширением названия пути. .TP \fBglob\-list\-expansions (C\-x g)\fP Отобразить список расширений, которые были бы сгенерированы с помощью \fBglob\-expand\-word\fP и повторно отобразить строку. Если указан числовой аргумент, то добавить \fB*\fP перед расширением названия пути. .TP \fBdump\-functions\fP Вывести все функции и их привязки к клавишам в поток вывода \fBreadline\fP. Если указан числовой аргумент, то выходные данные форматируются таким образом, чтобы их можно сделать частью файла \fIinputrc\fP. .TP \fBdump\-variables\fP Вывести все настраиваемые переменные \fBreadline\fP и их значения в поток вывода \fBreadline\fP. Если указан числовой аргумент, то выходные данные форматируются таким образом, чтобы их можно сделать частью файла \fIinputrc\fP. .TP \fBdump\-macros\fP Вывести все последовательности клавиш \fBreadline\fP, привязанные к макросам и строки, в которые они выводят в выходной поток \fBreadline\fP. Если указан числовой аргумент, то выходные данные форматируются таким образом, чтобы их можно сделать частью файла \fIinputrc\fP. .TP \fBexecute\-named\-command (M\-x)\fP Прочитать название команды с возможностью привязки \fBreadline\fP из входных данных и выполнить функцию, к которой она привязана, как если бы последовательность клавиш, к которой она была привязана, была указана во входных данных. Если эта функция снабжена числовым аргументом, то этот аргумент будет передан функции, которая выполняется. .TP \fBdisplay\-shell\-version (C\-x C\-v)\fP Вывести информацию о данной версии оболочки \fBbash\fP. .PD .SS "Завершение программ" Когда пользователь пытается выполнить ввод слова для команды или аргумента команды, для которой была определена спецификация завершения \fIcompspec\fP с использованием встроенной команды \fBcomplete\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже), то \fBreadline\fP вызывает программируемые средства завершения. .PP Во\-первых, \fBbash\fP определяет название команды. Если для этой команды была определена спецификация завершения, то спецификация завершения используется для создания списка возможных завершений для слова. Если командным словом является пустая строка (попытка завершения в начале пустой строки), то \fBbash\fP использует любую спецификацию завершения, определенную опцией \fB\-E\fP для \fBcomplete\fP. Опция \fB\-I\fP для \fBcomplete\fP указывает на то, что командное слово является первым в строке словом, не подлежащим присвоению или словом после разделителя команд, такого как \fB;\fP или \fB|\fP. Обычно это указывает на завершение названия команды. .PP Если командным словом является полное название пути, то \fBbash\fP сначала выполняет поиск спецификации завершения для полного названия пути. Если для полного названия пути нет спецификации завершения, то \fBbash\fP пытается найти спецификацию завершения для части, следующей за последней косой чертой. Если эти поиски не приводят к получению спецификации завершения или если для командного слова нет спецификации завершения, то \fBbash\fP использует любую спецификацию завершения, определенную опцией \fB\-D\fP для \fBcomplete\fP по умолчанию. Если спецификация завершения по умолчанию отсутствует, то \fBbash\fP выполняет расширение псевдонима для командного слова в качестве последнего средства и пытается найти спецификацию завершения для командного слова, полученного в результате любого успешного расширения. .PP Если спецификация завершения не найдена, то \fBbash\fP выполняет завершение по умолчанию, как описано выше в подразделе \fBЗавершение\fP. В противном случае, как только спецификация завершения найдена, \fBbash\fP использует её для создания списка совпадающих слов. .PP Сначала \fBbash\fP выполняет действия \fIactions\fP, указанные в спецификации завершения. Это возвращает только совпадения, которые являются префиксами завершаемого слова. Когда для заполнения названия файла или каталога используется опция \fB\-f\fP или \fB\-d\fP, то \fBbash\fP использует переменную оболочки .SM \fBFIGNORE\fP для фильтрации совпадений. .PP Далее, программируемое завершение генерирует совпадения, указанные с помощью шаблона расширения названия пути, предоставленного в качестве аргумента опции \fB\-G\fP. Слова, сгенерированные с помощью шаблона, не обязательно должны совпадать с завершаемым словом. \fBBash\fP использует переменную .SM \fBFIGNORE\fP для фильтрации совпадений, но не использует переменную оболочки .SM \fBGLOBIGNORE\fP. .PP Далее при завершении используется строка, указанная в качестве аргумента опции \fB\-W\fP. Сначала строка разделяется с использованием символов в специальной переменной .SM \fBIFS\fP в качестве разделителей. Это позволяет использовать кавычки оболочки внутри строки, чтобы обеспечить механизм для слов, содержащих метасимволы оболочки или символы в значении .SM \fBIFS\fP. Затем каждое слово расширяется с помощью фигурных скобок, тильды, параметров и переменных, подстановки команд и арифметического расширения, как описано выше в разделе .SM \fBРАСШИРЕНИЯ\fP. Результаты разбиваются по правилам, описанным выше в подразделе \fBРазделение слов\fP. Результаты расширения сопоставляются по префиксу с завершаемым словом, а совпадающие слова становятся возможными завершениями. .PP После того, как эти совпадения были сгенерированы, \fBbash\fP выполняет любую функцию оболочки или команду, указанную с помощью опций \fB\-F\fP и \fB\-C\fP. Когда вызывается команда или функция, тогда \fBbash\fP присваивает значения переменным .SM \fBCOMP_LINE\fP, .SM \fBCOMP_POINT\fP, .SM \fBCOMP_KEY\fP и .SM \fBCOMP_TYPE\fP, как описано выше в подразделе \fBПеременные оболочки\fP. Если вызывается функция, то \fBbash\fP также устанавливает переменные .SM \fBCOMP_WORDS\fP и .SM \fBCOMP_CWORD\fP. Когда вызывается функция или команда, тогда первый аргумент (\fB$1\fP) \- это название команды, аргументы которой завершаются, второй аргумент (\fB$2\fP) \- это завершаемое слово, а третий аргумент (\fB$3\fP) \- это слово предшествующее завершаемому слову в текущей командной строке. Нет никакой фильтрации сгенерированных завершений по завершаемому слову; функция или команда имеют полную свободу в генерации совпадений и им не нужно соответствовать префиксу слова. .PP Сначала вызывается любая функция, указанная с помощью \fB\-F\fP. Функция может использовать любые средства оболочки, включая описанные ниже встроенные команды \fBcompgen\fP и \fBcompopt\fP, для генерации совпадений. Она должна поместить возможные завершения в переменную массива .SM \fBCOMPREPLY\fP, по одному для каждого элемента массива. .PP Далее, любая команда, указанная с опцией \fB\-C\fP, вызывается в среде, эквивалентной подстановке команд. В стандартном выводе должен быть список завершений, по одному на строку. При необходимости символ новой строки будет заменен обратной косой чертой. Они добавляются к набору возможных завершений. .PP После генерации всех возможных завершений, \fBbash\fP применяет любой фильтр, указанный с помощью опции \fB\-X\fP, к заверениям в списке. Фильтр представляет собой шаблон, используемый для расширения названием пути; буква \fB&\fP в шаблоне заменяется текстом завершаемого слова. Букву \fB&\fP можно экранировать обратной косой чертой; обратная косая черта удаляется перед попыткой сопоставления. Любое завершение, соответствующее шаблону, удаляется из списка. Начальная буква \fB!\fP отменяет соответствие шаблону; в этом случае \fBbash\fP удаляет любое завершение, которое не соответствует шаблону. Если включена опция оболочки \fBnocasematch\fP, то \fBbash\fP выполняет сопоставление без учета регистра буквенных символов. .PP Наконец, программируемое завершение добавляет любой префикс и суффикс, указанные с помощью опций \fB\-P\fP и \fB\-S\fP, соответственно, к каждому завершению и возвращает результат в \fBreadline\fP в виде списка возможных завершений. .PP Если ранее примененные действия не привели к каким\-либо совпадениям, а опция \fB\-o dirnames\fP была указана в \fBcomplete\fP при определении спецификации завершения, то \fBbash\fP попытается заполнить название каталога. .PP Если опция \fB\-o plusdirs\fP была указана в \fBcomplete\fP при определении спецификации завершения, то \fBbash\fP попытается заполнить название каталога и добавит любые совпадения к набору возможных завершений. .PP По умолчанию, если найдена спецификация завершения, то всё, что она генерирует, возвращается в коде завершения в качестве полного набора возможных завершений. Завершения \fBbash\fP по умолчанию и \fBreadline\fP по умолчанию для завершения названия файла отключены. Если опция \fB\-o bashdefault\fP была указана в \fBcomplete\fP при определении спецификации завершения и спецификация завершения не генерирует совпадений, то \fBbash\fP выполняет попытку завершения по умолчанию. Если при выполнении спецификации завершения и, при попытке, при выполнении \fBbash\fP завершений по умолчанию не будет получено совпадений, а опция \fB\-o default\fP была указана в \fBcomplete\fP при определении спецификации завершения, то программируемое завершение выполняет завершение \fBreadline\fP по умолчанию. .PP Опции, указанные в \fBcomplete\fP и \fBcompopt\fP, могут управлять тем, как \fBreadline\fP обрабатывает завершения. Например, опция \fI\-o fullquote\fP указывает \fBreadline\fP заключать совпадения в кавычки, как если бы они были названиями файлов. Смотрите описание \fBcomplete\fP ниже для получения более подробной информации. .PP Когда спецификация завершения указывает, что она хочет завершить название каталога, тогда программируемые функции завершения заставляют \fBreadline\fP добавлять косую черту к завершенным названиям, которые являются символическими ссылками на каталоги, в зависимости от значения переменной \fBmark\-directories\fP \fBreadline\fP, независимо от установки переменной \fBmark\-symlinked\-directories\fP \fBreadline\fP. .PP Существует некоторая поддержка динамического изменения завершений. Это наиболее полезно при использовании в сочетании с завершением по умолчанию, указанным с помощью \fBcomplete \-D\fP. Функции оболочки, выполняемые как функции завершения, могут указывать, что завершение следует повторить, возвращая статус завершения, равный 124. Если функция оболочки возвращает значение 124 и изменяет спецификацию завершения, связанную с командой, для которой выполняется попытка завершения (указывается в качестве первого аргумента при выполнении функции), то программируемое завершение перезапускается с самого начала с попыткой найти новую спецификацию завершения для этой команды. Это может быть использовано для динамического создания набора завершений по мере попытки завершения, вместо того чтобы загружать их все сразу. .PP Например, предполагая, что существует библиотека спецификаций завершения, каждая из которых хранится в файле, соответствующем названию команды, следующая функция завершения по умолчанию будет загружать завершения динамически: .RS .EX .nf _completion_loader() { . \*"/etc/bash_completion.d/$1.sh\*".if \n(LL<80n \{\ \e .br .ti +4n .\} >/dev/null 2>&1 && return 124 } complete \-D \-F _completion_loader.if \n(LL<80n \{\ \e .br .ti +4n .\} \-o bashdefault \-o default .fi .EE .RE .SH ИСТОРИЯ Когда включена опция \fB\-o history\fP для встроенной команды \fBset\fP, тогда оболочка предоставляет доступ к \fIcommand history\fP, т. е. к списку ранее введенных команд. Значение переменной .SM \fBHISTSIZE\fP используется в качестве количества команд для сохранения в списке истории: оболочка сохраняет текст последних команд .SM \fBHISTSIZE\fP (по умолчанию 500). Оболочка сохраняет каждую команду в списке истории до расширения параметров и переменных (смотрите раздел .SM \fBРАСШИРЕНИЯ\fP выше), но после того, как выполняется расширение истории, в зависимости от значений переменных оболочки .SM \fBHISTIGNORE\fP и .SM \fBHISTCONTROL\fP. .PP При запуске \fBbash\fP инициализирует список истории, считывая записи истории из файла, название которого задается переменной .SM \fBHISTFILE\fP (по умолчанию .FN \*~/.bash_history ). Этот файл называется \fIhistory file\fP. При необходимости файл истории обрезается, чтобы содержать не большего числа записей истории, указанного значением переменной .SM \fBHISTFILESIZE\fP. Если значение .SM \fBHISTFILESIZE\fP не задано или равно нулю, нечисловому значению или числовому значению, меньшему нуля, то файл истории не усекается. .PP При чтении файла истории строки, начинающиеся с символа комментария истории, за которым сразу следует цифра, интерпретируются как временные метки для следующей строки истории. Эти временные метки отображаются необязательно в зависимости от значения переменной .SM \fBHISTTIMEFORMAT\fP. Временные метки истории, если они присутствуют,то разделяют записи истории, делая возможными многострочные записи. .PP Когда оболочка с включенной историей завершает работу, тогда \fBbash\fP копирует последние записи .SM \fB$HISTSIZE\fP из списка истории в .SM \fB$HISTFILE\fP. Если опция оболочки \fBhistappend\fP включена (смотрите описание \fBshopt\fP в разделе .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже), то \fBbash\fP добавляет записи в файл истории, в противном случае она перезаписывает файл истории. Если значение .SM \fBHISTFILE\fP не задано или равно нулю, или если файл истории недоступен для записи, то история не сохраняется. После сохранения истории, \fBbash\fP обрезает файл истории, чтобы он содержал не более .SM \fBHISTFILESIZE\fP строк, как описано выше. .PP Если задана переменная .SM \fBHISTTIMEFORMAT\fP, то оболочка записывает информацию о временных метках, связанную с каждой записью истории, в файл истории, помечая их символом комментария истории, таким образом, временные метки сохраняются во всех сеансах оболочки. При этом используется символ комментария к истории, чтобы отличать временные метки от других строк истории. Как указано выше, при использовании .SM \fBHISTTIMEFORMAT\fP временные метки разделяют многострочные записи истории. .PP Встроенная команда \fBfc\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже) выведет на экран или отредактирует и повторно выполнит часть списка истории. Встроенная команда \fBhistory\fP может отображать или изменять список истории и управлять файлом истории. При использовании редактирования из командной строки в каждом режиме редактирования доступны команды поиска, которые предоставляют доступ к списку истории. .PP Оболочка позволяет управлять тем, какие команды сохраняются в списке истории. Переменные .SM \fBHISTCONTROL\fP и .SM \fBHISTIGNORE\fP используются для сохранения только подмножеств введенных команд. Если опция оболочки \fBcmdhist\fP включена, то оболочка пытается сохранить каждую строку многострочной команды в одной и той же записи истории, добавляя точки с запятой, где это необходимо, для сохранения синтаксической корректности. Опция оболочки \fBlithist\fP изменяет \fBcmdhist\fP, сохраняя команду со встроенными символами новой строки вместо точек с запятой. Смотрите описание встроенной команды \fBshopt\fP ниже в разделе .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP для получения информации о настройке и отключении опций оболочки. .SH "РАСШИРЕНИЕ ИСТОРИИ" Оболочка поддерживает функциональную возможность расширения истории, аналогичную возможности расширения истории в \fBcsh\fP. В этом разделе описываются доступный синтаксис этой функциональной возможности. .PP Расширение истории включено по умолчанию для интерактивных оболочек и может быть отключено с помощью опции \fB+H\fP встроенной команды \fBset\fP (смотрите раздел .SM \fBВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ\fP ниже). Не интерактивные оболочки по умолчанию не выполняют расширение истории, но это можно включить с помощью .Q "set -H" . .PP Расширения истории вводят слова из списка истории во входной поток, упрощая повторение команд, вставляя аргументы предыдущей команды в текущую строку ввода или быстро исправляя ошибки в предыдущих командах. .PP Расширение истории выполняется сразу после прочтения всей строки, до того, как оболочка разбивает ее на слова, и выполняется для каждой строки в отдельности. Оболочка пытается сообщить функциям расширения истории о том, что кавычки из предыдущих строк все еще действуют. .PP Она состоит из двух частей. Первая заключается в определении того, какую запись в списке истории использовать при замене. Вторая \- в выборе частей этой записи для включения в текущую. .PP Запись, выбранная из истории, называется событием \fIevent\fP, а части этой записи, на которые воздействуют, называются словами \fIwords\fP. Для манипулирования выбранными словами доступны различные модификаторы \fImodifiers\fP. Запись разбивается на слова таким же образом, как и при чтении входных данных, так, что несколько слов, разделенных метасимволами \fImetacharacter\fPи заключенные в кавычки, считаются одним словом. Обозначение события \fIevent designator\fP выбирает событие, а дополнительное обозначение слова \fIword designator\fP выбирает слова из события, при этом также доступны различные дополнительные модификаторы \fImodifiers\fP для управления выбранными словами. .PP Расширения истории вводятся с помощью символа расширения истории, который по умолчанию равен \^\fB!\fP\^. Расширения истории могут отображаться в любом месте входных данных, но не являются вложенными. .PP Только обратная косая черта (\^\fB\e\fP\^) и одинарные кавычки могут заключать символ расширения истории, но символ расширения истории также рассматривается как заключенный в кавычки, если он непосредственно предшествует закрывающей двойной кавычке в строке, заключенной в двойные кавычки. .PP Некоторые символы запрещают расширение истории, если они находятся сразу после символа расширения истории, даже если он не заключен в кавычки; это \- пробел, табуляция, новая строка, возврат каретки, \fB=\fP и другие метасимволы оболочки, определенные выше. .PP Существует специальная аббревиатура для обозначения подстановки, действующая, когда символ быстрой подстановки \fIquick substitution\fP (описанный выше как \fBhistchars\fP) является первым символом в строке. Она выбирает предыдущую запись в списке истории, используя обозначение события, эквивалентное \fB!!\fP и заменяет в этой записи одну строку на другую. Это описано ниже в подразделе \fBОбозначения событий\fP. Это единственное расширение истории, которое не начинается с символа расширения истории. .PP Несколько опций оболочки, настраиваемых с помощью встроенной команды \fBshopt\fP, изменяют поведение расширения истории (смотрите описание встроенной команды \fBshopt\fP ниже). Если включена опция оболочки \fBhistverify\fP и используется библиотека \fBreadline\fP, то подстановки в истории не передаются немедленно в синтаксический анализатор оболочки. Вместо этого развернутая строка загружается в буфер редактирования \fBreadline\fP для дальнейшей модификации. Если используется \fBreadline\fP и включена опция оболочки \fBhistreedit\fP, то неудачная подстановка истории перезагружается в буфер редактирования \fBreadline\fP для исправления. .PP Опция \fB\-p\fP для встроенной команды \fBhistory\fP показывает, что будет делать расширение истории перед её использованием. Опция \fB\-s\fP для встроенной команды \fBhistory\fP добавит команды в конец списка истории без их фактического выполнения, чтобы они были доступны для последующего вызова. .PP Оболочка позволяет управлять различными символами, используемыми механизмом расширения истории (смотрите описание \fBhistchars\fP выше в подразделе \fBПеременные оболочки\fP). Оболочка использует символ комментария к истории для обозначения временных меток истории при записи файла истории. .SS "Указатели событий" Указатель события \- это ссылка на запись в списке истории. Указатель события состоит из части слова, начинающейся с символа расширения истории и заканчивающейся указателем слова, если оно присутствует, или окончанием слова. Если ссылка не является абсолютной, то события отображаются относительно текущего положения в списке истории. .PP .PD 0 .TP \fB!\fP Запустить подстановку в истории, за исключением случаев, когда за ней следуют пробел \fBblank\fP, новая строка, возврат каретки, = или, когда опция оболочки \fBextglob\fP включена с помощью встроенной команды \fBshopt\fP, (. .TP \fB!\fP\fIn\fP Обратиться к записи списка истории \fIn\fP. .TP \fB!\-\fP\fIn\fP Обратиться к текущей записи за вычетом \fIn\fP. .TP \fB!!\fP Обратиться к предыдущей записи. Это синоним слова .Q !\-1 . .TP \fB!\fP\fIstring\fP Обратится к самой последней команде, предшествующей текущей позиции в списке истории, начинающейся со строки \fIstring\fP. .TP \fB!?\fP\fIstring\fP\fB[?]\fP Обратиться к самой последней команде, предшествующей текущей позиции в списке истории, содержащей строку \fIstring\fP. Конечная буква \fB?\fP может быть опущена, если за \fIstring\fP сразу следует новая строка. Если \fIstring\fP отсутствует, то используется строка из самого последнего поиска; если предыдущей строки поиска нет, то это ошибка. .TP \fB\d\s+2\*^\s-2\u\fP\fIstring1\fP\fB\d\s+2\*^\s-2\u\fP\fIstring2\fP\fB\d\s+2\*^\s-2\u\fP Быстрая замена. Повторить предыдущую команду, заменив строку \fIstring1\fP на строку \fIstring2\fP. Эквивалентно .Q !!:s\d\s+2\*^\s-2\u\fIstring1\fP\d\s+2\*^\s-2\u\fIstring2\fP\d\s+2\*^\s-2\u (смотрите подраздел \fBМодификаторы\fP ниже). .TP \fB!#\fP На данный момент введена вся командная строка целиком. .PD .SS "Указатели слова" Указатели слов используются для выбора нужных слов из события. Они необязательны; если указатель слова не указан, то в расширении истории используется всё событие целиком. Символ \fB:\fP отделяет спецификацию события от обозначения слова. Он может быть опущен, если укзатель слова начинается с \fB\*^\fP, \fB$\fP, \fB*\fP, \fB\-\fP или \fB%\fP. Слова нумеруются с начала строки, причем первое слово обозначается 0 (ноль). Слова вставляются в текущую строку через одинарные пробелы. .PP .PD 0 .TP \fB0 (zero)\fP Нулевое слово. Для оболочки это командное слово. .TP \fIn\fP Слово \fIn\fP. .TP \fB\*^\fP Первый аргумент: слово word 1. .TP \fB$\fP Последнее слово. Обычно это последний аргумент, но он расширяется до нулевого слова, если в строке есть только одно слово. .TP \fB%\fP Первое слово, совпадающее с самым последним .Q ?\fIstring\fP? выполнять поиск, если строка поиска начинается с символа, который является частью слова. По умолчанию поиск начинается с конца каждой строки и продолжается до начала, поэтому первое найденное слово находится ближе всего к концу строки. .TP \fIx\fP\fB\-\fP\fIy\fP Диапазон слов; .Q \-\fIy\fP сократить .Q 0\-\fIy\fP . .TP \fB*\fP Все слова, кроме нулевого. Это синоним слова .Q \fI1\-$\fP . Использовать \fB*\fP, если в событии есть только одно слово, то это не является ошибкой; в этом случае оно расширяется до пустой строки. .TP \fBx*\fP Сокращение \fIx\-$\fP. .TP \fBx\-\fP Сокращает \fIx\-$\fP как \fBx*\fP, но опускает последнее слово. Если \fBx\fP отсутствует, то по умолчанию оно равно 0. .PD .PP Если обозначение слова указано без указания события, то в качестве события используется предыдущая команда, эквивалентно \fB!!\fP. .SS Модификаторы После необязательного указателя слова, расширение может включать последовательность из одного или нескольких следующих модификаторов, каждому из которых предшествует .Q : . Они изменяют или редактируют слово или фразы, выбранные из истории событий. .PP .PD 0 .TP \fBh\fP Удалить завершающий компонент названия пути, оставив только заголовок. .TP \fBt\fP Удалить все начальные компоненты названия пути, оставив только концевые. .TP \fBr\fP Удалить завершающий суффикс формы \fI.xxx\fP, оставив основное название. .TP \fBe\fP Удалить все, кроме завершающего суффикса. .TP \fBp\fP Вывести новую команду, но не выполнять ее. .TP \fBq\fP Закавычивать замененные слова, но избегать дальнейших замен. .TP \fBx\fP Замененные слова заключить в кавычки, как в \fBq\fP, но разбить на слова в пробелах \fBblanks\fPи в новой строке. Модификаторы \fBq\fP и \fBx\fP являются взаимоисключающими; при расширении используется последний из них. .TP \fBs/\fP\fIold\fP\fB/\fP\fInew\fP\fB/\fP Заменить старое \fIold\fP на новое \fInew\fP вместо первого символа в строке событий. В качестве разделителя вместо / может использоваться любой символ. Последний разделитель необязателен, если он является последним символом в строке событий. Разделители в \fIold\fP и \fInew\fP заключены в одиночную обратную косую черту. Если в \fInew\fP появляется символ &, то он заменяется на \fIold\fP. Одиночная обратная косая черта заключает & в кавычки. Если значение \fIold\fP равно нолю, то оно устанавливается равным последней замене \fIold\fP или, если предыдущие замены в истории не выполнялись, то последней замене \fIstring\fP в поиске \fB!?\fP\fIstring\fP\fB[?]\fP. Если значение \fInew\fP равно нолю, то все совпадающие значения \fIold\fP удаляются. .TP \fB&\fP Повторить предыдущую замену. .TP \fBg\fP Вызывает применение изменений ко всей строке событий. Используется в сочетании с .Q \fB:s\fP (например, .Q \fB:gs/\fIold\fP/\fInew\fP/\fR ) или .Q \fB:&\fP . При использовании с .Q \fB:s\fP , вместо / можно использовать любой разделитель, а последний разделитель необязателен, если он является последним символом строки события. Символ \fBa\fP может использоваться как синоним символа \fBg\fP. .TP \fBG\fP Применить следующие .Q \fBs\fP или .Q \fB&\fP изменить один раз каждое слово в строке событий. .PD .SH "ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ" .\" start of bash_builtins .zZ .PP Если не указано иное, каждая встроенная команда, описанная в этом разделе как принимающая опции, перед которыми стоит \fB\-\fP, принимает \fB\-\-\fP для обозначения конца опций. Встроенные команды \fB:\fP \fBtrue\fP, \fBfalse\fP и \fBtest\fP/\fB[\fP не принимают опции и не обрабатывают \fB\-\-\fP особым образом. Встроенные команды \fBexit\fP, \fBlogout\fP, \fBreturn\fP, \fBbreak\fP, \fBcontinue\fP, \fBlet\fP и \fBshift\fP принимают и обрабатывают аргументы, начинающиеся с \fB\-\fP, не требуя \fB\-\-\fP. Другие встроенные команды, которые принимают аргументы, но не указаны как принимающие опции, интерпретируют аргументы, начинающиеся с \fB\-\fP, как недопустимые опции и требуют \fB\-\-\fP для предотвращения такой интерпретации. .PP .PD 0 .TP \fB:\fP [\fIarguments\fP] .PD Никакого действия; команда не выполняет ничего, кроме расширения аргументов \fIarguments\fP и выполнения любых указанных перенаправлений. Статус возврата равен нулю. .TP \fB\&.\&\fP [\fB\-p\fP \fIpath\fP] \fIfilename\fP [\fIarguments\fP] .PD 0 .TP \fBsource\fP [\fB\-p\fP \fIpath\fP] \fIfilename\fP [\fIarguments\fP] .PD Команда \fB\&.\&\fP (\fBsource\fP) считывает и выполняет команды из файла с названием \fIfilename\fP в текущей среде оболочки и возвращает статус завершения последней команды, выполненной из \fIfilename\fP. .IP Если файл \fIfilename\fP не содержит косой черты, то \fB\&.\&\fP выполняет поиск для него. Если указана опция \fB\-p\fP, то \fB\&.\&\fP рассматривает \fIpath\fP как список каталогов, разделенных двоеточием, в которых можно найти файл \fIfilename\fP; в противном случае \fB\&.\&\fP использует записи в .SM \fBPATH\fP, чтобы найти каталог, содержащий \fIfilename\fP. Файл \fIfilename\fP не обязательно должен быть исполняемым. Когда \fBbash\fP не находится в режиме posix, тогда она выполняет поиск в текущем каталоге, если \fIfilename\fP не найден в .SM \fBPATH\fP, то она не выполняет поиск в текущем каталоге, если указана опция \fB\-p\fP. Если опция \fBsourcepath\fP для встроенной команды \fBshopt\fP отключена, то \fB\&.\&\fP не выполняет поиск в .SM \fBPATH\fP. .IP Если указаны какие\-либо аргументы \fIarguments\fP, то они становятся позиционными параметрами при выполнении файла с названием \fIfilename\fP. В противном случае позиционные параметры остаются неизменными. .IP Если опция \fB\-T\fP включена, то \fB.\fP наследует любую ловушку в \fBDEBUG\fP; если это не так, то любая строка ловушки \fBDEBUG\fP сохраняется и восстанавливается при вызове \fB.\fP, а \fB.\fP отключает ловушку \fBDEBUG\fP во время ее выполнения. Если значение \fB\-T\fP не задано, а исходный файл изменяет ловушку \fBDEBUG\fP, то новое значение сохраняется после завершения \fB.\fP. Возвращаемый статус \- это статус последней команды, выполненной из файла \fIfilename\fP (0, если команды не выполняются) и ненулевое значение, если файл \fIfilename\fP не найден или он не может быть прочитан. .TP \fBalias\fP [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] .\|.\|.] Без аргументов или с опцией \fB\-p\fP, команда \fBalias\fP выводит на стандартный вывод список псевдонимов в виде \fBalias\fP \fIname\fP=\fIvalue\fP . Когда будут предоставлены аргументы, то определяет псевдоним для каждого названия \fIname\fP, для которого задано значение \fIvalue\fP. Пробел в конце \fIvalue\fP приводит к проверке следующего слова на подстановку псевдонима, когда псевдоним раскрывается во время синтаксического анализа команды. Для каждого \fIname\fP в списке аргументов, для которого не указано \fIvalue\fP, выводит название и значение псевдонима для \fIname\fP. Команда \fBalias\fPвозвращает значение true, если не задано значение \fIname\fP (без соответствующего =\fIvalue\fP), для которого не был определен псевдоним. .TP \fBbg\fP [\fIjobspec\fP .\|.\|.] Возобновлять каждое приостановленное задание \fIjobspec\fP в фоновом режиме, как если бы оно было запущено с помощью \fB&\fP. Если \fIjobspec\fP отсутствует, то оболочка использует свое представление о текущем задании \fIcurrent job\fP. \fBbg\fP \fIjobspec\fP возвращает 0, если не выполняется (когда управление заданиями отключено) или при запуске с включенным управлением заданиями, когда любое указанное в \fIjobspec\fP не было найдено или было запущено без управления заданиями. .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] [\fB\-lsvSVX\fP] .PD 0 .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] [\fB\-q\fP \fIfunction\fP] [\fB\-u\fP \fIfunction\fP] [\fB\-r\fP \fIkeyseq\fP] .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-f\fP \fIfilename\fP .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-x\fP \fIkeyseq\fP[:] \fIshell\-command\fP .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fIkeyseq\fP:\fIfunction\-name\fP .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-p\fP|\fB\-P\fP [\fIreadline\-command\fP] .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fIkeyseq\fP:\fIreadline\-command\fP .TP \fBbind\fP \fIreadline\-command\-line\fP .PD Отображать текущие привязки клавиш и функций \fBreadline\fP, привязывать последовательность клавиш к функции или макросу \fBreadline\fP или к команде оболочки или устанавливать переменную \fBreadline\fP. Каждый аргумент, не являющийся опцией, является привязкой клавиши или командой, как это было бы показано в файле инициализации \fBreadline\fP \fI.inputrc\fP, но каждая привязка или команда должны передаваться как отдельный аргумент; например, *'\*"\eC\-x\eC\-r\*": re\-read\-init\-file\*'. В следующих описаниях выходные данные, доступные для повторного чтения, форматируются в виде команд, которые отображаются в файле инициализации \fBreadline\fP или которые предоставляются в качестве отдельных аргументов для команды \fBbind\fP. Параметры, если они указаны, имеют следующие значения: .RS .PD 0 .TP \fB\-m \fP\fIkeymap\fP Использовать \fIkeymap\fP в качестве плана расположения клавиш, на который будут влиять последующие привязки. Допустимыми названиями для \fIkeymap\fP являются \fIemacs, emacs\-standard, emacs\-meta, emacs\-ctlx, vi, vi\-move, vi\-command\fP и вставка \fIvi\-insert\fP. \fIvi\fP эквивалентно \fIvi\-command\fP (\fIvi\-move\fP также является синонимом); \fIemacs\fP эквивалентно \fIemacs\-standard\fP. .TP \fB\-l\fP Список всех функций \fBreadline\fP. .TP \fB\-p\fP Отображать названия функций и привязки \fBreadline\fP таким образом, чтобы их можно было использовать в качестве аргумента для последующей команды \fBbind\fP или в файле инициализации \fBreadline\fP. Если аргументы остаются после обработки опций, то \fBbind\fP обрабатывает их как названия команд \fBreadline\fP и ограничивает вывод этими названиями. .TP \fB\-P\fP Вывести список текущих названий функций и привязок \fBreadline\fP. Если после обработки опций остаются аргументы, то \fBbind\fP обрабатывает их как названия команд \fBreadline\fP и ограничивает вывод этими названиями. .TP \fB\-s\fP Вывести на дисплей последовательности клавиш \fBreadline\fP, привязанные к макросам и строки, которые они выводят, таким образом, чтобы их можно было использовать в качестве аргумента для последующей команды \fBbind\fP или в файле инициализации \fBreadline\fP. .TP \fB\-S\fP Вывести на дисплей последовательности клавиш \fBreadline\fP, привязанные к макросам, и строки, которые они выводят. .TP \fB\-v\fP Вывести на дисплей названия и значения переменных \fBreadline\fP таким образом, чтобы их можно было использовать в качестве аргумента для последующей команды \fBbind\fP или в файле инициализации \fBreadline\fP. .TP \fB\-V\fP Показать текущие названия и значения переменных \fBreadline\fP. .TP \fB\-f \fP\fIfilename\fP Прочитать привязки клавиш из файла \fIfilename\fP. .TP \fB\-q \fP\fIfunction\fP Вывести на дисплей последовательности клавиш, которые вызывают наименования функций \fBreadline\fP \fIfunction\fP. .TP \fB\-u \fP\fIfunction\fP Отменить привязку всех клавишных последовательностей, привязанных к именованным функциям \fBreadline\fP \fIfunction\fP. .TP \fB\-r \fP\fIkeyseq\fP Удалить все текущие привязки для \fIkeyseq\fP. .TP \fB\-x \fP\fIkeyseq\fP\fB[: ]\fP\fIshell\-command\fP Приводит к тому, что команда оболочки \fIshell\-command\fP будет выполняться всякий раз, когда вводится набор клавиш \fIkeyseq\fP. Разделителем между \fIkeyseq\fP и \fIshell\-command\fP является либо пробел, либо двоеточие, за которым при необходимости следует пробел. Если разделителем является пробел, то команда \fIshell\-command\fP должна быть заключена в двойные кавычки, а \fBreadline\fP расширяет любой из своих специальных вариантов обратной косой чертой в \fIshell\-command\fP перед сохранением. Если разделителем является двоеточие, то любые заключающие двойные кавычки необязательны, а \fBreadline\fP не раскрывает командную строку перед ее сохранением. Поскольку все выражение привязки клавиши должно быть одним аргументом, то оно должно быть заключено в одинарные кавычки. Когда выполняется \fIshell\-command\fP, командная строка устанавливает для переменной .SM \fBREADLINE_LINE\fP значение содержимого буфера строк \fBreadline\fP, а для переменных .SM \fBREADLINE_POINT\fP и .SM \fBREADLINE_MARK\fP \- текущее значение. местоположения точки вставки и сохраненной точки вставки (метки), соответственно. Оболочка присваивает любой числовой аргумент, указанный пользователем, в переменной .SM \fBREADLINE_ARGUMENT\fP. Если аргумент отсутствует, то эта переменная не задана. Если выполненная команда изменит значение любого из значений .SM \fBREADLINE_LINE\fP, .SM \fBREADLINE_POINT\fP или .SM \fBREADLINE_MARK\fP, то эти новые значения будут отражены в состоянии редактирования. .TP \fB\-X\fP Вывести все последовательности клавиш, привязанные к командам оболочки, и связанные с ними команды в формате, который можно повторно использовать в качестве аргумента для последующей команды \fBbind\fP. .PD .PP Возвращаемое значение равно 0, если только не указана нераспознанная опция или не произошла ошибка. .RE .TP \fBbreak\fP [\fIn\fP] Выход из циклов \fBfor\fP, \fBwhile\fP, \fBuntil\fP или \fBselect\fP. Если указано значение \fIn\fP, то \fBbreak\fP завершает цикл, указанный \fIn\fP. \fIn\fP должно быть \(>= 1. Если \fIn\fP больше, чем количество замкнутых циклов, все замкнутые циклы завершаются. Возвращаемое значение равно 0, если только \fIn\fP не больше или не равно 1. .TP \fBbuiltin\fP \fIshell\-builtin\fP [\fIarguments\fP] Выполнить указанную встроенную команду оболочки \fIshell\-builtin\fP, передав ей аргументы \fIarguments\fP и вернуть статус завершения. Это полезно при определении функции, название которой совпадает с названием встроенной команды оболочки, сохраняя функциональность встроенной команды оболочки внутри функции. Встроенная команда \fBcd\fP обычно переопределяется таким образом. Возвращаемое значение равно false, если команда \fIshell\-builtin\fP не является встроенной командой оболочки. .TP \fBcaller\fP [\fIexpr\fP] Возвращает контекст любого активного вызова подпрограммы (функции оболочки или сценария, выполняемого с помощью встроенных команд \fB.\fP или \fBsource\fP). .IP Без \fIexpr\fP, вызов \fBcaller\fP отображает номер строки и название исходного файла текущего вызова подпрограммы. Если в качестве \fIexpr\fP указано неотрицательное целое число, то \fBcaller\fP отображает номер строки, название подпрограммы и исходный файл, соответствующие этой позиции в текущем стеке выполняемых вызовов. Эта дополнительная информация может быть использована, например, для вывода трассировки стека. Текущим кадром является кадр 0. .IP Возвращаемое значение равно 0, если только оболочка не выполняет вызов подпрограммы или выражение \fIexpr\fP не соответствует допустимой позиции в стеке вызовов. .TP .PD 0 \fBcd\fP [\fB\-L\fP] [\fB\-@\fP] [\fIdir\fP] .TP \fBcd\fP \fB\-P\fP [\fB\-e\fP] [\fB\-@\fP] [\fIdir\fP] .PD Изменить текущий каталог на каталог \fIdir\fP. Если каталог \fIdir\fP не указан, то значение переменной оболочки .SM \fBHOME\fP используется как \fIdir\fP. Если существует переменная .SM \fBCDPATH\fP и \fIdir\fP не начинается с косой черты (/), то \fBcd\fP использует ее в качестве пути поиска: оболочка выполняет поиск по каждому названию каталога в .SM \fBCDPATH\fP в поисках \fIdir\fP. Альтернативные названия каталогов в .SM \fBCDPATH\fP разделяются двоеточием (:). Пустое название каталога в .SM \fBCDPATH\fP совпадает с текущим каталогом, т.е., .Q .\& . .IP Опция \fB\-P\fP заставляет \fBcd\fP использовать физическую структуру каталогов, разрешая символьные ссылки при обходе \fIdir\fP и перед обработкой экземпляров .FN .\|.\& в \fIdir\fP (смотрите также опцию \fB\-P\fP для встроенной команды \fBset\fP). .IP Опция \fB\-L\fP заставляет \fBcd\fP переходить по символическим ссылкам, разрешая ссылку после обработки экземпляров .FN .\|.\& в \fIdir\fP. Если .FN .\|.\& появляется в \fIdir\fP, то \fBcd\fP обрабатывает его, удаляя непосредственно предшествующий компонент названия пути из \fIdir\fP, возвращая косую черту или начало \fIdir\fP и проверяя, что часть \fIdir\fP, которую она обработала до этого момента, все еще является допустимым названием каталога после удаления компонента названия пути. Если это неверное название каталога, то \fBcd\fP возвращает ненулевой статус. Если не указано ни \fB\-L\fP, ни \fB\-P\fP, то \fBcd\fP ведет себя так, как если бы было указано \fB\-L\fP. .IP Если для опции \fB\-e\fP задано \fB\-P\fP, и \fBcd\fP не удается успешно определить текущий рабочий каталог после успешной смены каталога, то она возвращает ненулевой статус. .IP В системах, которые это поддерживают, опция \fB\-@\fP представляет расширенные атрибуты, связанные с файлом, в виде каталога. .IP Аргумент \fB\-\fP преобразуется в .SM \fB$OLDPWD\fP перед попыткой изменения каталога. .IP Если \fBcd\fP использует непустое название каталога из .SM \fBCDPATH\fP или если \fB\-\fP является первым аргументом, а изменение каталога прошло успешно, то \fBcd\fP записывает абсолютный путь к новому рабочему каталогу в стандартный вывод. .IP Если изменение каталога прошло успешно, то \fBcd\fP присваивает переменной среды \fBPWD\fP значение нового названия каталога, а переменной среды \fBOLDPWD\fP присваивает значение текущего рабочего каталога перед изменением. .IP Возвращаемое значение равно true, если каталог был успешно изменен; в противном случае \- false. .TP \fBcommand\fP [\fB\-pVv\fP] \fIcommand\fP [\fIarg\fP .\|.\|.] Встроенная команда \fBcommand\fP запускает \fIcommand\fP с аргументом \fIargs\fP, подавляя обычный поиск функции оболочки для \fIcommand\fP. Выполняются только встроенные команды или команды, найденные в .SM \fBPATH\fP с названием \fIcommand\fP. Если указана опция \fB\-p\fP, то поиск \fIcommand\fP выполняется с использованием значения по умолчанию для .SM \fBPATH\fP, которое гарантированно позволяет найти все стандартные утилиты. .IP Если указана опция \fB\-V\fP или \fB\-v\fP, то команда \fBcommand\fP выводит описание \fIcommand\fP. Опция \fB\-v\fP отображает одно слово, обозначающее команду или название файла, используемые для вызова \fIcommand\fP; опция \fB\-V\fP предоставляет более подробное описание. .IP Если указана опция \fB\-V\fP или \fB\-v\fP, то статус завершения равен нулю, если \fIcommand\fP была найдена и отличен от нуля, если нет. Если ни одна из опций не указана и произошла ошибка или \fIcommand\fP не может быть найдена, то статус завершения равен 127. В противном случае статус завершения встроенной команды \fBcommand\fP совпадает со статусом завершения \fIcommand\fP. .TP \fBcompgen\fP [\fB\-V\fP \fIvarname\fP] [\fIoption\fP] [\fIword\fP] Создавать возможные совпадения по завершению для слова \fIword\fP в соответствии с опциями \fIoption\fP, которые могут быть любыми опциями, принятыми для встроенной команды \fBcomplete\fP, за исключением опций \fB\-p\fP, \fB\-r\fP, \fB\-D\fP, \fB\-E\fP и \fB\-I\fP и вывести совпадения на стандартный вывод. .IP Если указана опция \fB\-V\fP, то команда \fBcompgen\fP сохраняет созданные завершения в переменной индексированного массива \fIvarname\fP вместо того, чтобы выводить их на стандартный вывод. .IP При использовании опций \fB\-F\fP или \fB\-C\fP различные переменные оболочки, заданные программируемыми средствами завершения, хотя и доступны, но не будут иметь полезных значений. .IP Совпадения будут созданы также, как если бы программируемый код завершения создал их непосредственно из спецификации завершения с теми же флагами. Если указано значение слова \fIword\fP, то будут выведены или сохранены только те завершения, которые соответствуют слову \fIword\fP. .IP Возвращаемое значение равно true, если только не была указана недопустимая опция или не было сгенерировано никаких критериев. .TP \fBcomplete\fP [\fB\-abcdefgjksuv\fP] [\fB\-o\fP \fIcomp\-option\fP] [\fB\-DEI\fP] [\fB\-A\fP \fIaction\fP] .br [\fB\-G\fP \fIglobpat\fP] [\fB\-W\fP \fIwordlist\fP] [\fB\-F\fP \fIfunction\fP] [\fB\-C\fP \fIcommand\fP] .br [\fB\-X\fP \fIfilterpat\fP] [\fB\-P\fP \fIprefix\fP] [\fB\-S\fP \fIsuffix\fP] \fIname\fP [\fIname\fP \&.\|.\|.] .PD 0 .TP \fBcomplete\fP \fB\-pr\fP [\fB\-DEI\fP] [\fIname\fP .\|.\|.] .PD Указать, как должны быть заполнены аргументы для каждого именования \fIname\fP. .IP Если указана опция \fB\-p\fP или если не указаны никакие опции, или слова \fIname\fP, то распечатать существующие спецификации завершения таким образом, чтобы их можно было повторно использовать в качестве входных данных. Опция \fB\-r\fP удаляет спецификацию завершения для каждого именования \fIname\fP или, если \fIname\fP не указаны, то все спецификации завершения. .IP Опция \fB\-D\fP указывает на то, что другие предоставленные опции и действия должны применяться к .Q default завершению команды; то есть к попытке завершения команды, для которой ранее не было определено завершение. Опция \fB\-E\fP указывает, что другие предоставленные опции и действия должны применяться к .Q empty завершению команды; то есть попытке завершения пустой строки. Опция \fB\-I\fP указывает на то, что другие предоставленные опции и действия должны применяться к завершению начального слова в строке, не связанного с назначением, или после разделителя команд, такого как \fB;\fP или \fB|\fP, которое обычно является завершением названия команды. Если указано несколько опций, то опция \fB\-D\fP имеет приоритет перед опцией \fB\-E\fP, а обе опции имеют приоритет перед опцией \fB\-I\fP. Если указан какой\-либо из аргументов \fB\-D\fP, \fB\-E\fP или \fB\-I\fP, то любые другие аргументы \fIname\fP игнорируются; эти завершения применяются только к регистру, указанному опцией. .IP Описан процесс применения этих спецификаций завершения при попытке завершения слова .ie \n(zZ=1 in \fIbash\fP(1). .el above under \fBProgrammable Completion\fP. .IP Другие опции, если они указаны, то имеют следующие значения. Аргументы опций \fB\-G\fP, \fB\-W\fP и \fB\-X\fP (и, при необходимости, опций \fB\-P\fP и \fB\-S\fP) должны быть заключены в кавычки, чтобы защитить их от расширения до вызова встроенной команды \fBcomplete\fP. .IP .RS .PD 0 .TP 8 \fB\-o\fP \fIcomp\-option\fP Опция \fIcomp\-option\fP управляет несколькими аспектами поведения compspec, помимо простого создания дополнений. Опция \fIcomp\-option\fP может быть одной из: .RS .TP 8 \fBbashdefault\fP Выполните остальные действия по умолчанию для оболочки \fBbash\fP, если compspec не генерирует совпадений. .TP 8 \fBdefault\fP Используйте заполнение названия файла по умолчанию \fBreadline\fP, если спецификация завершения не генерирует совпадений. .TP 8 \fBdirnames\fP Выполнить заполнение названия каталога, если спецификация завершения (compspec) не генерирует критериев соответствия. .TP 8 \fBfilenames\fP Сообщить \fBreadline\fP, что спецификация завершения генерирует названия файлов, поэтому она может выполнять любую обработку, связанную с названиями файлов (например, добавить косую черту к названиям каталогов, заключить специальные символы в кавычки или подавитьь пробелы в конце). Это предназначено для использования с функциями оболочки. .TP 8 \fBfullquote\fP Сообщить \fBreadline\fP заключать в кавычки все завершенные слова, даже если они не являются названиями файлов. .TP 8 \fBnoquote\fP Сообщить \fBreadline\fP, чтобы она не заключала завершенные слова в кавычки, если они являются названиями файлов (по умолчанию названия файлов заключаются в кавычки). .TP 8 \fBnosort\fP Сообщить \fBreadline\fP, чтобы она не сортировала список возможных дополнений в алфавитном порядке. .TP 8 \fBnospace\fP Сообщить \fBreadline\fP, чтобы она не добавляла пробел (по умолчанию) к словам, завершенным в конце строки. .TP 8 \fBplusdirs\fP После генерации всех совпадений, определенных спецификацией завершения, попробовать заполнить название каталога и добавить все совпадения к результатам других действий. .RE .TP 8 \fB\-A\fP \fIaction\fP Это действие \fIaction\fP может быть одним из следующих при создании списка возможных завершений: .RS .TP 8 \fBalias\fP Псевдонимы. Они также могут быть определены с помощью \fB\-a\fP. .TP 8 \fBarrayvar\fP Названия переменных массива. .TP 8 \fBbinding\fP Названия привязанных клавиш \fBReadline\fP. .TP 8 \fBbuiltin\fP Названия встроенных команд оболочки. Они также могут быть определены с помощью \fB\-b\fP. .TP 8 \fBcommand\fP Названия команд. Они также могут быть определены с помощью \fB\-c\fP. .TP 8 \fBdirectory\fP Названия каталогов. Они также могут быть определены с помощью \fB\-d\fP. .TP 8 \fBdisabled\fP Названия отключенных встроенных компонентов оболочки. .TP 8 \fBenabled\fP Названия включённых встроенных компонентов оболочки. .TP 8 \fBexport\fP Названия экспортируемых переменных оболочки. Они также могут быть определены с помощью \fB\-e\fP. .TP 8 \fBfile\fP Названия файлов и каталогов, аналогичные завершению названия файла \fBreadline\fP. Также может быть указано как \fB\-f\fP. .TP 8 \fBfunction\fP Названия функций оболочки. .TP 8 \fBgroup\fP Названия групп. Для этого также может использоваться \fB\-g\fP. .TP 8 \fBhelptopic\fP Разделы справки, принятые во встроенной команде \fBhelp\fP. .TP 8 \fBhostname\fP Названия хостов, взятые из файла, указанного в переменной оболочки .SM \fBHOSTFILE\fP. .TP 8 \fBjob\fP Названия заданий, если управление заданиями активно. Также может использоваться \fB\-j\fP. .TP 8 \fBkeyword\fP Зарезервированные слова оболочки. Также может использоваться \fB\-k\fP. .TP 8 \fBrunning\fP Названия запущенных заданий, если управление заданиями активно. .TP 8 \fBservice\fP Названия служб. Также может использоваться \fB\-s\fP. .TP 8 \fBsetopt\fP Допустимые аргументы для опции \fB\-o\fP для встроенной команды\fBset\fP. .TP 8 \fBshopt\fP Названия опций оболочки, принятые во встроенной команде \fBshopt\fP. .TP 8 \fBsignal\fP Названия сигналов. .TP 8 \fBstopped\fP Названия остановленных заданий. Если управление заданиями активно. .TP 8 \fBuser\fP Имена пользователей. Может также использоваться \fB\-u\fP. .TP 8 \fBvariable\fP Названия переменных оболочки. Может также использоваться \fB\-v\fP. .RE .TP 8 \fB\-C\fP \fIcommand\fP Команда \fIcommand\fP выполняется в окружающей среде подоболочки, а ее выходные данные используются в качестве возможных завершений. Аргументы передаются также, как с помощью опции \fB\-F\fP. .TP 8 \fB\-F\fP \fIfunction\fP Функция оболочки \fIfunction\fP выполняется в текущей среде оболочки. Когда функция выполняется, тогда первый аргумент (\fB$1\fP) \- это название команды, аргументы которой завершаются, второй аргумент (\fB$2\fP) \- это завершаемое слово, а третий аргумент (\fB$3\fP) \- это слово, предшествующее завершению слова в текущей командной строке. Когда функция \fIfunction\fP завершается, тогда программируемое завершение извлекает возможные завершения из значения переменной массива .SM \fBCOMPREPLY\fP. .TP 8 \fB\-G\fP \fIglobpat\fP Развернуть шаблон расширения названия пути \fIglobpat\fP, чтобы создать возможные завершения. .TP 8 \fB\-P\fP \fIprefix\fP Добавить префикс \fIprefix\fP в начало каждого возможного завершения после того, как будут применены все остальные опции. .TP 8 \fB\-S\fP \fIsuffix\fP Добавить суффикс \fIsuffix\fP к каждому возможному завершению после того, как были применены все остальные опции. .TP 8 \fB\-W\fP \fIwordlist\fP Разделить список слов \fIwordlist\fP, используя символы в специальной переменной .SM \fBIFS\fP в качестве разделителей и расширить каждое получившееся слово. В списке слов В \fIwordlist\fP используются кавычки оболочки, чтобы обеспечить механизм, позволяющий словам содержать метасимволы оболочки или символы в значении .SM \fBIFS\fP. Возможными завершениями являются элементы результирующего списка, которые соответствуют префиксу завершаемого слова. .TP 8 \fB\-X\fP \fIfilterpat\fP Шаблон \fIfilterpat\fP \- это шаблон, используемый для расширения имени пути. Он применяется к списку возможных дополнений, сгенерированному предыдущими опциями и аргументами, и каждое завершение, соответствующее \fIfilterpat\fP, удаляется из списка. Начальный символ \fB!\fP в \fIfilterpat\fP отменяет шаблон; в этом случае любое завершение, не соответствующее \fIfilterpat\fP, удаляется. .PD .PP Возвращаемое значение равно true, если не указана недопустимая опция или опция, отличная от \fB\-p\fP, \fB\-r\fP, \fB\-D\fP, \fB\-E\fP, или \fB\-I\fP, не указанная без аргумента \fIname\fP, выполняется попытка чтобы удалить спецификацию завершения для \fIname\fP, для которой не существует спецификации, или при добавлении спецификации завершения возникает ошибка. .RE .TP \fBcompopt\fP [\fB\-o\fP \fIoption\fP] [\fB\-DEI\fP] [\fB+o\fP \fIoption\fP] [\fIname\fP] Изменить опции завершения для каждого \fIname\fP в соответствии с опциями \fIoption\fP или для выполняемого в данный момент завершения, если не указаны именования \fIname\fP. Если не указаны опции \fIoption\fP, то отобразить опции завершения для каждого \fIname\fP или текущего завершения. Возможные значения опции \fIoption\fP являются действительными для встроенной команды \fBcomplete\fP, описанной выше. .IP Опция \fB\-D\fP указывает на то, что другие предоставленные опции должны применяться к .Q default команде завершения; опция \fB\-E\fP указывает, что другие предоставленные опции должны применяться к .Q empty команде завершения; а опция \fB\-I\fP указывает, что для завершения начального слова в строке должны применяться другие предоставленные опции. Они определяются таким же образом, как и для встроенной команды \fBcomplete\fP. .IP Если указано несколько опций, то опция \fB\-D\fP имеет приоритет перед опцией \fB\-E\fP, а обе опции имеют приоритет перед опцией \fB\-I\fP. .IP Возвращаемое значение равно true, если только не указана недопустимая опция, не предпринята попытка изменить опции для \fIname\fP, для которого не существует спецификации завершения, или не произошла ошибка вывода. .TP \fBcontinue\fP [\fIn\fP] Команда \fBcontinue\fP возобновляет следующую итерацию замкнутого цикла \fBfor\fP, \fBwhile\fP, \fBuntil\fP или \fBselect\fP. Если указано значение \fIn\fP, то \fBbash\fP возобновляет \fIn\fP\-й замкнутый цикл. Значение \fIn\fP должно быть \(>= 1. Если \fIn\fP больше, чем количество замкнутых циклов, то оболочка возобновляет последний замкнутый цикл (следующий .Q top-level цикл). Возвращаемое значение равно 0, если только значение \fIn\fP не больше или не равно 1. .TP \fBdeclare\fP [\fB\-aAfFgiIlnrtux\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] .\|.\|.] .PD 0 .TP \fBtypeset\fP [\fB\-aAfFgiIlnrtux\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] .\|.\|.] .PD Объявить переменные и/или присвоить им атрибуты. Если именования \fIname\fP не заданы, то отобразить значения переменных или функций. Опция \fB\-p\fP отобразит атрибуты и значения каждого именования \fIname\fP. Когда \fB\-p\fP используется с аргументами \fIname\fP, тогда дополнительные опции, отличные от \fB\-f\fP и \fB\-F\fP, игнорируются. .IP Если опция \fB\-p\fP указана без аргументов \fIname\fP, то \fBdeclare\fP отобразит атрибуты и значения всех переменных, имеющих атрибуты, указанные в дополнительных опциях. Если в \fB\-p\fP не указано никаких других опций, то в \fBdeclare\fP будет отображаться атрибуты и значения всех переменных оболочки. Опция \fB\-f\fP ограничивает отображение функциями оболочки. .IP Опция \fB\-F\fP запрещает отображение определений функций; выводятся только название функции и атрибуты. Если опция оболочки \fBextdebug\fP включена с помощью \fBshopt\fP, то также отображаются название исходного файла и номер строки, в которых определено каждое \fIname\fP. Опция \fB\-F\fP подразумевает \fB\-f\fP. .IP Опция \fB\-g\fP заставляет создавать или изменять переменные в глобальной области видимости, даже если команда \fBdeclare\fP выполняется в функции оболочки. Она игнорируется, если \fBdeclare\fP не выполняется в функции оболочки. .IP Опция \fB\-I\fP приводит к тому, что локальные переменные наследуют атрибуты (за исключением атрибута \fInameref\fP) и значение любой существующей переменной с таким же \fIname\fP в окружающей области видимости. Если существующей переменной нет, то локальная переменная изначально не задана. .IP Чтобы ограничить вывод переменными с указанным атрибутом или присвоить переменным атрибуты, можно использовать следующие опции: .RS .PD 0 .TP \fB\-a\fP Каждая переменная \fIname\fP является индексированной переменной массива (смотрите подраздел \fBМассивы\fP .ie \n(zZ=1 in \fIbash\fP(1)). .el above). .TP \fB\-A\fP Каждая \fIname\fP является переменной ассоциативного массива (смотрите \fBМассивы\fP .ie \n(zZ=1 in \fIbash\fP(1)). .el above). .TP \fB\-f\fP Каждое именование \fIname\fP относится к функции оболочки. .TP \fB\-i\fP Переменная обрабатывается как целое число; арифметическое значение (смотрите в разделе .SM \fBАРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ\fP .ie \n(zZ=1 in \fIbash\fP(1)) .el above) выполняется, когда переменной присваивается значение. .TP \fB\-l\fP Когда переменной присваивается значение, все символы верхнего регистра преобразуются в строчные. Атрибут верхнего регистра отключен. .TP \fB\-n\fP Присвоить каждой переменной \fIname\fP атрибут \fInameref\fP, сделав его ссылкой на другую переменную. Эта другая переменная определяется значением \fIname\fP. Все ссылки, присвоения и модификации атрибутов \fIname\fP, за исключением тех, которые используют или изменяют сам атрибут \fB\-n\fP, выполняются для переменной, на которую ссылается значение \fIname\fP. Атрибут nameref не может быть применен к переменным массива. .TP \fB\-r\fP Сделать названия \fIname\fP доступными только для чтения. В этом случае этим названиям нельзя будет присвоить значения с помощью последующих инструкций присваивания или отменить их. .TP \fB\-t\fP Присвоить каждому \fIname\fP атрибут \fItrace\fP. Отслеживаемые функции наследуют ловушки \fBDEBUG\fP и \fBRETURN\fP от вызывающей оболочки. Атрибут trace не имеет специального значения для переменных. .TP \fB\-u\fP Когда переменной присваивается значение, все строчные символы преобразуются в прописные. Атрибут нижнего регистра отключен. .TP \fB\-x\fP Отметить каждое \fIname\fP для экспорта в последующие команды через окружающую среду. .PD .PP Используется .Q + вместо .Q \- вместо этого отключить указанный атрибут, за исключением того, чтобы \fB+a\fP и \fB+A\fP не могли использоваться для уничтожения переменных массива, а \fB+r\fP не удалять атрибут только для чтения. .PP При использовании в функции, команды \fBdeclare\fP и \fBtypeset\fP делают каждое значение \fIname\fP локальным, как в случае с командой \fBlocal\fP, если только не указана опция \fB\-g\fP. Если за именованием переменной следует =\fIvalue\fP, то значение переменной устанавливается равным значению \fIvalue\fP. При использовании \fB\-a\fP или \fB\-A\fP и синтаксиса составного присваивания для создания переменных массива, дополнительные атрибуты вступают в силу только после их присвоения. .PP Возвращаемое значение равно 0, если не обнаружена недопустимая опция, тогда предпринимается попытка определить функцию с помощью .Q "\-f foo=bar" , попытки присвоить значение переменной, доступной только для чтения, предпринимается попытка присвоить значение переменной массива без использования синтаксиса составного присвоения (смотрите \fBМассивы\fP .ie \n(zZ=1 in \fIbash\fP(1)), .el above), одно из \fInames\fP не является допустимым названием переменной оболочки, предпринимается попытка отключить статус только для чтения для переменной только для чтения, предпринимается попытка отключить статус массива для переменной массива или предпринимается попытка отобразить несуществующую функцию с помощью \fB\-f\fP. .RE .TP \fBdirs [\-clpv] [+\fP\fIn\fP\fB] [\-\fP\fIn\fP\fB]\fP При отсутствии опций отображается список сохраненных в данный момент каталогов. По умолчанию отображается одна строка с наименованиями каталогов, разделенными пробелами. Каталоги добавляются в список с помощью команды \fBpushd\fP; команда \fBpopd\fP удаляет записи из списка. Текущий каталог всегда является первым каталогом в стеке. .IP Опции, если они указаны, имеют следующие значения: .RS .PD 0 .TP \fB\-c\fP Очищает стек каталогов, удаляя все записи. .TP \fB\-l\fP Создается список с использованием полных путей; формат списка по умолчанию использует тильду для обозначения домашнего каталога. .TP \fB\-p\fP Вывести стек каталогов с одной записью в строке. .TP \fB\-v\fP Вывести стек каталогов с одной записью в строке, добавляя к каждой записи ее индекс в стеке. .TP \fB+\fP\fIn\fP Вывести на дисплей \fIn\fP\-ю запись, начиная с левой части списка, отображаемого с помощью \fBdirs\fP при вызове без опций, начиная с нуля. .TP \fB\-\fP\fIn\fP Отобразить \fIn\fP\-ю запись, начиная с правой части списка, отображаемого с помощью \fBdirs\fP при вызове без опций, начинает с нуля. .PD .PP Возвращаемое значение равно 0, если только не указана недопустимая опция или если \fIn\fP не индексирует за пределы окончания стека каталогов. .RE .TP \fBdisown\fP [\fB\-ar\fP] [\fB\-h\fP] [\fIid\fP .\|.\|.] Если нет опций, то удалить все идентификаторы \fIid\fP из таблицы активных заданий. Каждый \fIid\fP может быть спецификацией задания \fIjobspec\fP или идентификатором процесса \fIpid\fP; если \fIid\fP является \fIpid\fP, то \fBdisown\fP использует задание, содержащее \fIpid\fP, как \fIjobspec\fP. .IP Если указана опция \fB\-h\fP, то \fBdisown\fP не удаляет задания, соответствующие каждому \fIid\fP, из таблицы заданий, а помечает их, чтобы оболочка не отправляла .SM \fBSIGHUP\fP заданию, если оболочка получит .SM \fBSIGHUP\fP. .IP Если опция \fIid\fP не указана, то \fB\-a\fP означает удаление или пометку всех заданий; опция \fB\-r\fP без аргумента \fIid\fP удаляет или помечает запущенные задания. Если \fIid\fP не указан и не указаны ни опция \fB\-a\fP, ни опция \fB\-r\fP, то \fBdisown\fP удаляет или помечает текущее задание. .IP Возвращаемое значение равно 0, если только в \fIid\fP не указано допустимое задание. .TP \fBecho\fP [\fB\-neE\fP] [\fIarg\fP .\|.\|.] Ввести аргументы \fIarg\fP, разделенные пробелами, за которыми следует новая строка. Статус возврата равен 0, если не возникает ошибка записи. Если указано значение \fB\-n\fP, то завершающая новая строка не выводится. .IP Если задана опция \fB\-e\fP, то \fBecho\fP интерпретирует следующие символы, экранируемые обратной косой чертой. Опция \fB\-E\fP отключает интерпретацию этих экранирующих символов даже в системах, где они интерпретируются по умолчанию. Опция оболочки \fBxpg_echo\fP определяет, интерпретировать ли какие\-либо опции \fBecho\fP и расширять ли эти символы escape. Команда \fBecho\fP не интерпретирует \fB\-\-\fP как окончание опций. .IP Команда \fBecho\fP интерпретирует следующие последовательности escape: .RS .PD 0 .TP \fB\ea\fP сигнал тревоги (сирена) .TP \fB\eb\fP возврат на один символ .TP \fB\ec\fP подавлять дальнейший вывод .TP \fB\ee\fP .TP \fB\eE\fP экранирующий символ .TP \fB\ef\fP новая страница .TP \fB\en\fP новая строка .TP \fB\er\fP возврат каретки .TP \fB\et\fP горизонтальная табуляция .TP \fB\ev\fP вертикальная табуляция .TP \fB\e\e\fP обратная косая черта .TP \fB\e0\fP\fInnn\fP Восьмиразрядный символ, значением которого является восьмеричное значение \fInnn\fP (от нуля до трех восьмеричных цифр). .TP \fB\ex\fP\fIHH\fP Восьмибитный символ, значением которого является шестнадцатеричное значение \fIHH\fP (одна или две шестнадцатеричные цифры). .TP \fB\eu\fP\fIHHHH\fP Символ в кодировке Unicode (ISO/IEC 10646), значением которого является шестнадцатеричное значение \fIHHHH\fP (от одной до четырех шестнадцатеричных цифр). .TP \fB\eU\fP\fIHHHHHHHH\fP Символ в кодировке Unicode (ISO/IEC 10646), значением которого является шестнадцатеричное значение \fIHHHHHHHH\fP (от одной до восьми шестнадцатеричных цифр). .PD .PP \fBecho\fP записывает все не распознанные символы, экранированные обратной косой чертой, без изменений. .RE .TP \fBenable\fP [\fB\-a\fP] [\fB\-dnps\fP] [\fB\-f\fP \fIfilename\fP] [\fIname\fP .\|.\|.] Включение и отключение встроенных команд оболочки. Отключение встроенной команды позволяет запускать исполняемый файл с тем же названием, что и у встроенной команды оболочки, без указания полного пути, хотя оболочка обычно выполняет поиск встроенных команд перед файлами. .IP Если указано значение \fB\-n\fP, каждое значение \fIname\fP отключено; в противном случае значения \fIname\fP включены. Например, чтобы использовать двоичный файл \fBtest\fP, найденный с помощью .SM \fBPATH\fP, вместо встроенной версии оболочки, запустите .QN "enable \-n test" . .IP Если аргументы \fIname\fP не указаны или если указана опция \fB\-p\fP, то вывести список встроенных команд оболочки. При отсутствии других опций список будет состоять из всех включенных встроенных команд оболочки. Если указано значение \fB\-n\fP, то выводятся только отключенные встроенные команды. Если указано значение \fB\-a\fP, то выводимый список включает все встроенные команды с указанием того, включены они или нет. Опция \fB\-s\fP означает ограничение вывода на .SM POSIX \fIspecial\fP встроенных команд. .IP Опция \fB\-f\fP означает загрузку новой встроенной команды с названием \fIname\fP из общего объекта \fIfilename\fP в системах, поддерживающих динамическую загрузку. Если \fIfilename\fP не содержит косой черты, то \fBBash\fP будет использовать значение переменной \fBBASH_LOADABLES_PATH\fP в качестве списка каталогов, разделенных двоеточием, в которых будет выполнен поиск \fIfilename\fP. Значение по умолчанию для \fBBASH_LOADABLES_PATH\fP зависит от системы и может включать .Q .\& принудительный поиск в текущем каталоге. Опция \fB\-d\fP приведет к удалению встроенной команды, ранее загруженной с помощью \fB\-f\fP. Если \fI\-s\fP используется с \fI\-f\fP, то новая встроенная команда становится .SM POSIX специальной встроенной командой. .IP Если опции не указаны и \fIname\fP не является встроенной командой оболочки, то \fBenable\fP попытается загрузить \fIname\fP из общего объекта с названием \fIname\fP, как если бы команда была .QN "enable \-f \fIname name\fP" . .IP Возвращаемое значение равно 0, если только \fIname\fP не является встроенным в оболочку или не произошла ошибка при загрузке нового встроенного файла из общего объекта. .TP \fBeval\fP [\fIarg\fP .\|.\|.] Объединить аргументы \fIarg\fP в одну команду, разделив их пробелами. Затем \fBBash\fP считывает и выполняет эту команду и возвращает ее статус завершения как статус возврата \fBeval\fP. Если нет аргументов \fIargs\fPили есть только нулевые аргументы, то \fBeval\fP возвращает 0. .TP \fBexec\fP [\fB\-cl\fP] [\fB\-a\fP \fIname\fP] [\fIcommand\fP [\fIarguments\fP]] Если указана команда \fIcommand\fP, то она заменяет оболочку без создания нового процесса. Команда \fIcommand\fP не может быть встроенной командой оболочки или функцией. Аргументы \fIarguments\fP становятся аргументами команды \fIcommand\fP. Если указана опция \fB\-l\fP, то оболочка ставит тире в начале нулевого аргумента, передаваемого в \fIcommand\fP. Это то, что делает \fIlogin\fP(1). Опция \fB\-c\fP приводит к тому, что \fIcommand\fP выполняется с пустым окружением. Если указано значение \fB\-a\fP, то оболочка передает именование \fIname\fP в качестве нулевого аргумента выполняемой команде. .IP Если по какой\-либо причине команда \fIcommand\fP не может быть выполнена, то завершается работа неинтерактивной оболочки, если только не включена опция \fBexecfail\fP. В этом случае она возвращает ненулевой статус. Интерактивная оболочка возвращает ненулевой статус, если файл не может быть выполнен. Подоболочка завершает работу безоговорочно, если \fBexec\fP завершается ошибкой. .IP Если команда \fIcommand\fP не определена, то в текущей оболочке вступают в силу любые перенаправления, а статус возврата равен 0. Если возникает ошибка перенаправления, то статус возврата равен 1. .TP \fBexit\fP [\fIn\fP] Приводит к завершению работы оболочки со статусом \fIn\fP. Если \fIn\fP опущено, то статус завершения соответствует последней выполненной команде. Любая ошибка в .SM \fBEXIT\fP выполняется до завершения работы оболочки. .TP \fBexport\fP [\fB\-fn\fP\^] [\fIname\fP[=\fIvalue\fP]] .\|.\|. .PD 0 .TP \fBexport \-p [\-f\^]\fP .PD Введенные названия \fInames\fP помечаются для автоматического экспорта в среду последующих выполняемых команд. Если задана опция \fB\-f\fP, то названия \fInames\fP относятся к функциям. .IP Опция \fB\-n\fP отменяет экспорт или удаляет атрибут export из каждого названия \fIname\fP. Если названия \fInames\fP не заданы или указана только опция \fB\-p\fP, то \fBexport\fP отображает список названий всех экспортируемых переменных в стандартном выводе. При совместном использовании \fB\-p\fP и \fB\-f\fP отображаются экспортированные функции. Опция \fB\-p\fP отображает выходные данные в форме, которая может быть повторно использована в качестве входных данных. .IP Команда \fBexport\fP позволяет задать значение переменной при ее экспорте или не экспорте, указав после именования переменной значение =\fIvalue\fP. При этом значение переменной устанавливается равным \fIvalue\fP, а атрибут "export" изменяется. Команда \fBexport\fP возвращает статус завершения, равный 0, если не обнаружена недопустимая опция, одно из наименований \fInames\fP не является допустимым наименованием переменной оболочки или если \fB\-f\fP содержит название \fIname\fP, которое не является функцией. .TP \fBfalse\fP Ничего не делает; возвращает ненулевой статус. .TP \fBfc\fP [\fB\-e\fP \fIename\fP] [\fB\-lnr\fP] [\fIfirst\fP] [\fIlast\fP] .PD 0 .TP \fBfc\fP \fB\-s\fP [\fIpat\fP=\fIrep\fP] [\fIcmd\fP] .PD Первая форма выбирает диапазон команд от первой \fIfirst\fP до последней \fIlast\fP из списка истории и отображает или редактирует и повторно выполняет их. \fIFirst\fP и \fIlast\fP могут быть указаны в виде строки (чтобы найти последнюю команду, начинающуюся с этой строки) или в виде числа (индекс в списке истории, где отрицательное число используется как смещение от номера текущей команды). .IP При выводе списка значение \fIfirst\fP или \fIlast\fP, равное 0, эквивалентно \-1, а значение \-0 эквивалентно текущей команде (обычно команде \fBfc\fP); в противном случае значение 0 эквивалентно \-1, а значение \-0 недопустимо. Если значение \fIlast\fP не указано, оно устанавливается в текущую команду для вывода списка (чтобы .QN "fc \-l \-10" вывести последние 10 команд), а в противном случае, вывести \fIfirst\fP. Если \fIfirst\fP не указано, то для редактирования используется предыдущая команда, а для вывода \-16. .IP Если указана опция \fB\-l\fP, то команды отображаются в стандартном выводе. Опция \fB\-n\fP не указывает номера команд при выводе. Опция \fB\-r\fP изменяет порядок следования команд на противоположный. .IP В противном случае \fBfc\fP вызывает редактор с названием \fIename\fP для файла, содержащего эти команды. Если \fIename\fP не указано, то \fBfc\fP использует значение переменной .SM \fBFCEDIT\fP и значение .SM \fBEDITOR\fP, если .SM \fBFCEDIT\fP не задано. Если ни одна из переменных не задана, то \fBfc\fP использует .FN vi. Когда редактирование завершено, \fBfc\fP считывает файл, содержащий отредактированные команды и эхо\-сигналы, и выполняет их. .IP Во второй форме \fBfc\fP повторно выполняет команду \fIcommand\fP после замены каждого экземпляра \fIpat\fP на \fIrep\fP. Команда \fICommand\fP интерпретируется так же, как \fIfirst\fP выше. .IP Полезным псевдонимом для использования с \fBfc\fP является .Q r=\* fc \-s\*\(dq\(dq , чтобы при вводе .Q "r cc" запускать последнюю команду, начинающуюся с .Q cc и выводить .Q r повторно для выполнения команду. .IP Если используется первая форма, то возвращаемое значение равно нулю, если только не встречается недопустимая опция или если \fIfirst\fP или \fIlast\fP не указывают строки истории вне диапазона. При редактировании и повторном выполнении файла команды возвращаемым значением является значение последней выполненной командой или ошибка (failure), если во временном файле возникает ошибка. Если используется вторая форма, то возвращаемый статус соответствует повторно выполненной команде, если только \fIcmd\fP не указывает допустимую запись в истории, и в этом случае \fBfc\fP возвращает ненулевой статус. .TP \fBfg\fP [\fIjobspec\fP] Вывести задание \fIjobspec\fP на передний план и сделать его текущим заданием. Если \fIjobspec\fP отсутствует, то \fBfg\fP использует представление оболочки о текущем задании \fIcurrent job\fP. Возвращаемое значение соответствует команде, помещенной на передний план или ошибке при запуске, когда управление заданиями отключено, или при запуске с включенным управлением заданиями, если \fIjobspec\fP не указывает допустимое задание, или \fIjobspec\fP указывает задание, которое было запущено без управления заданием. .TP \fBgetopts\fP \fIoptstring\fP \fIname\fP [\fIarg\fP .\|.\|.] Команда \fBgetopts\fP используется скриптами и функциями оболочки для анализа позиционных параметров и получения опций и их аргументов. \fIoptstring\fP содержит символы опции, которые необходимо распознать; если за символом следует двоеточие, то ожидается, что опция будет иметь аргумент, который должен быть отделен от неё пробелом. Двоеточие и вопросительный знак не могут использоваться в качестве символов опции. .IP Каждый раз, когда она вызывается, \fBgetopts\fP помещает следующую опцию в переменную оболочки \fIname\fP, инициализируя \fIname\fP, если она не существует и индекс следующего обрабатываемого аргумента в переменную .SM \fBOPTIND\fP. .SM \fBOPTIND\fP инициализируется значением 1 при каждом вызове оболочки или сценария оболочки. Когда для опции требуется аргумент, то \fBgetopts\fP помещает этот аргумент в переменную .SM \fBOPTARG\fP. .IP Оболочка не сбрасываетпеременную .SM \fBOPTIND\fP автоматически; она должна быть сброшена вручную между несколькими вызовами \fBgetopts\fP в рамках одного и того же вызова оболочки, чтобы использовать новый набор параметров. .IP Когда она достигает конца опций, \fBgetopts\fP завершает работу с возвращаемым значением, превышающим ноль. .SM Значение \fBOPTIND\fP равно индексу первого аргумента, не включающего опцию, а значение \fIname\fP равно ?. .IP Команда \fBgetopts\fP обычно анализирует позиционные параметры, но если в качестве значений \fIarg\fP указано больше аргументов, то вместо этого \fBgetopts\fP анализирует их. .IP Команда \fBgetopts\fP может сообщать об ошибках двумя способами. Если первый символ \fIoptstring\fP является двоеточием,то \fBgetopts\fP использует "тихий" \fIsilent\fP отчет об ошибках. При нормальной работе \fBgetopts\fP выводит диагностические сообщения при обнаружении недопустимых опций или отсутствующих аргументов опций. Если переменной .SM \fBOPTERR\fP присвоено значение 0, то \fBgetopts\fP не выводит никаких сообщений об ошибках, даже если первый символ \fIoptstring\fP не является двоеточием. .IP Если команда \fBgetopts\fP обнаруживает недопустимую опцию, то она помещает ? в название \fIname\fP и, если "тихо" (silent) не определено, то выводит сообщение об ошибке и сбрасывает значение .SM \fBOPTARG\fP. Если же "тихо" определено, то \fBgetopts\fP присваивает найденному символу опции значение .SM \fBOPTARG\fP и не выводит диагностическое сообщение. .IP Если требуемый аргумент не найден, а команда \fBgetopts\fP не "тихая" , то \fBgetopts\fP присваивает значению \fIname\fP знак вопроса (\^\fB?\fP\^), сбрасывает .SM \fBOPTARG\fP и выводит диагностическое сообщение. Если же \fBgetopts\fP "тихая", то она заменяет значение \fIname\fP двоеточием (\^\fB:\fP\^), а значение .SM \fBOPTARG\fP \- найденным символом опции. .IP \fBgetopts\fP возвращает значение true, если найдена указанная или неуказанная опция. Возвращает значение false, если обнаружен конец списка опций или возникает ошибка. .TP \fBhash\fP [\fB\-lr\fP] [\fB\-p\fP \fIfilename\fP] [\fB\-dt\fP] [\fIname\fP] Каждый раз, когда вызывается \fBhash\fP, он запоминает полный путь к команде \fIname\fP, определенный путем поиска в каталогах в \fB$PATH\fP. Все ранее запомненные пути, связанные с \fIname\fP, отбрасываются. Если указана опция \fB\-p\fP, то \fBhash\fP использует название \fIfilename\fP в качестве полного пути к команде. .IP Опция \fB\-r\fP приводит к тому, что оболочка забывает все сохраненные местоположения. Присвоение переменной \fBPATH\fP также очищает все хэшированные названия файлов. Опция \fB\-d\fP приводит к тому, что оболочка "забывает" сохраненное местоположение каждого файла \fIname\fP. .IP Если указана опция \fB\-t\fP, то \fBhash\fP выводит полный путь, соответствующий каждому \fIname\fP. Если несколько аргументов \fIname\fP указаны с помощью \fB\-t\fP, то \fBhash\fP выводит \fIname\fP перед соответствующим хэшированным полным путем. Опция \fB\-l\fP отображает выходные данные в формате, который может быть повторно использован в качестве входных данных. .IP Если аргументы не указаны или указан только \fB\-l\fP, то \fBhash\fP выводит информацию о запомненных командах. Опции \fB\-t\fP, \fB\-d\fP и \fB\-p\fP (опции, которые действуют на аргументы \fIname\fP) являются взаимоисключающими. Только одна из них будет действующей. Если указано более одной опции, то опция \fB\-t\fP имеет более высокий приоритет, чем опция \fB\-p\fP и обе опции имеют более высокий приоритет, чем \fB\-d\fP. .IP Статус возврата равен нулю, если только \fIname\fP не найдено или не определена недопустимая опция. .TP \fBhelp\fP [\fB\-dms\fP] [\fIpattern\fP] Отображать справочную информацию о встроенных командах. Если указано значение шаблон \fIpattern\fP , то команда \fBhelp\fP предоставляет подробную справку по всем командам, соответствующим шаблону, как описано ниже; в противном случае выводится список всех встроенных команд и составных команд оболочки. .IP Опции, если они определены, имеют следующие значения: .RS .TP .PD 0 \fB\-d\fP Вывести на дисплей описание каждого шаблона \fIpattern\fP .TP \fB\-m\fP Вывести на дисплей описание каждого шаблона \fIpattern\fP в формате, подобном странице руководства (manpage) .TP \fB\-s\fP Вывести на дисплей только обзор об использовании для каждого шаблона \fIpattern\fP .PD .RE .IP Если шаблон \fIpattern\fP содержит символы, соответствующие шаблону (смотрите подраздел .SM \fBСоответствие шаблону\fP выше), то это рассматривается как шаблон оболочки и команда \fBhelp\fP выводит описание каждого раздела справки, соответствующего \fIpattern\fP. .IP Если это не так, но шаблон \fIpattern\fP точно соответствует названию раздела справки, то команда \fBhelp\fP выводит описание, связанное с этим разделом. В противном случае команда \fBhelp\fP выполняет сопоставление префиксов и выводит описания всех соответствующих разделов справки. .IP Возвращаемый статус равен 0, если только ни одна команда не соответствует шаблону \fIpattern\fP. .TP \fBhistory [\fP\fIn\fP\fB]\fP .PD 0 .TP \fBhistory\fP \fB\-c\fP .TP \fBhistory \-d\fP \fIoffset\fP .TP \fBhistory \-d\fP \fIstart\fP\-\fIend\fP .TP \fBhistory\fP \fB\-anrw\fP [\fIfilename\fP] .TP \fBhistory\fP \fB\-p\fP \fIarg\fP [\fIarg\fP .\|.\|.] .TP \fBhistory\fP \fB\-s\fP \fIarg\fP [\fIarg\fP .\|.\|.] .PD Если опции отсутствуют, то выводится список истории команд с номерами. Записи, начинающиеся с \fB*\fP, были изменены. В аргументе \fIn\fP указываются только последние \fIn\fP записей. Если переменная оболочки .SM \fBHISTTIMEFORMAT\fP задана и не равна нулю, то она используется в качестве строки формата для \fIstrftime\fP(3) для вывода временной метки, связанной с каждой выводимой записью истории. Если в \fBhistory\fP используется .SM \fBHISTTIMEFORMAT\fP, то не будет выведен промежуточный пробел между отформатированной меткой времени и записью истории. .IP Если указано значение \fIfilename\fP, то \fBhistory\fP использует его в качестве названия файла истории; если нет, то используется значение .SM \fBHISTFILE\fP. Если значение \fIfilename\fP не указано, а значение .SM \fBHISTFILE\fP не задано или равно нулю, то опции \fB\-a, \-n, \-r\fP и \fB\-w\fP не действуют. .IP Опции, если они указаны, имеют следующие значения: .RS .PD 0 .TP \fB\-c\fP Очистить список истории, удалив все записи. Это можно использовать вместе с другими опциями для замены списка истории. .TP \fB\-d\fP \fIoffset\fP Удалить запись истории в позиции \fIoffset\fP. Если значение \fIoffset\fP отрицательное, то оно интерпретируется как относительное значение, на единицу превышающее последнюю позицию в истории, поэтому отрицательные индексы отсчитываются от конца истории, а индекс, равный \-1, относится к текущей команде \fBhistory \-d\fP. .TP \fB\-d\fP \fIstart\fP\-\fIend\fP Удалите диапазон записей истории между позициями \fIstart\fP и \fIend\fP включительно. Положительные и отрицательные значения для \fIstart\fP и \fIend\fP интерпретируются так, как описано выше. .TP \fB\-a\fP Добавить следующие .Q new строки истории в файл истории. Это строки истории, введенные с начала текущего сеанса \fBbash\fP, но еще не добавленные в файл истории. .TP \fB\-n\fP Прочитать строки истории, которые еще не были прочитаны из файла истории и добавить их в текущий список истории. Это строки, добавленные в файл истории с начала текущего сеанса оболочки \fBbash\fP. .TP \fB\-r\fP Прочитать файл истории и добавить его содержимое в текущий список истории. .TP \fB\-w\fP Записать текущий список истории в файл истории, перезаписав файл истории. .TP \fB\-p\fP Выполнить подстановку истории в следующих аргументах \fIargs\fP и отобразить результат в стандартном выводе, не сохраняя результаты в списке истории. Каждый аргумент \fIarg\fP должен быть заключен в кавычки, чтобы отключить обычное расширение истории. .TP \fB\-s\fP Сохранить аргументы \fIargs\fP в списке истории как отдельную запись. Последняя команда в списке истории удаляется перед добавлением аргументов \fIargs\fP. .PD .RE .IP Если задана переменная .SM \fBHISTTIMEFORMAT\fP,то команда \fBhistory\fP записывает информацию о метке времени, связанной с каждой записью истории, в файл истории, помеченный символом комментария к истории, как описано выше. При чтении файла истории строки, начинающиеся с символа комментария к истории, за которым сразу следует цифра, интерпретируются как временные метки для следующей записи истории. .IP Возвращаемое значение равно 0, если только не задана недопустимая опция, не произошла ошибка при чтении или записи файла истории, в качестве аргумента для \fB\-d\fP указано недопустимое значение смещения \fIoffset\fP или диапазон или не завершилось ошибкой расширение истории, указанное в качестве аргумента для \fB\-p\fP. .TP \fBjobs\fP [\fB\-lnprs\fP] [ \fIjobspec\fP .\|.\|. ] .PD 0 .TP \fBjobs\fP \fB\-x\fP \fIcommand\fP [ \fIargs\fP .\|.\|. ] .PD В первой форме перечислены активные задания. Параметры имеют следующие значения: .RS .PD 0 .TP \fB\-l\fP Список идентификаторов процессов в дополнение к обычной информации. .TP \fB\-n\fP Выводить на дисплей информацию только о заданиях, статус которых изменился с момента последнего уведомления пользователя об их статусе. .TP \fB\-p\fP Указать только идентификатор главного процесса заданий группы процессов. .TP \fB\-r\fP Выводить на дисплей только запущенные задания. .TP \fB\-s\fP Выводить на дисплей только остановленные задания. .PD .RE .IP Если указано \fIjobspec\fP, то команда \fBjobs\fP ограничивает вывод информацией об этом задании. Возвращаемый статус равен 0, если только не обнаружена недопустимая опция или не указано недопустимое значение \fIjobspec\fP. .IP Если указана опция \fB\-x\fP, то команда \fBjobs\fP заменяет любое \fIjobspec\fP, найденное в \fIcommand\fP или \fIargs\fP, на соответствующий идентификатор группы процессов и выполняет \fIcommand\fP, передавая её аргументы \fIargs\fP и возвращает статус завершения. .TP \fBkill\fP [\fB\-s\fP \fIsigspec\fP | \fB\-n\fP \fIsignum\fP | \fB\-\fP\fIsigspec\fP] \fIid\fP [ .\|.\|. ] .PD 0 .TP \fBkill\fP \fB\-l\fP|\fB\-L\fP [\fIsigspec\fP | \fIexit_status\fP] .PD Команда посылает сигнал, указанный \fIsigspec\fP или \fIsignum\fP, процессам, именуемым каждым \fIid\fP. Каждый \fIid\fP может быть спецификацией задания \fIjobspec\fP или идентификатором процесса \fIpid\fP. Сигнал \fIsigspec\fP \- это либо название сигнала без учета регистра, такое как .SM \fBSIGKILL\fP (с префиксом .SM \fBSIG\fP или без него), либо номер сигнала; \fIsignum\fP \- это номер сигнала. Если \fIsigspec\fP не указано, то \fBkill\fP посылает .SM \fBSIGTERM\fP. .IP Опция \fB\-l\fP выводит список названий сигналов. Если при вводе опции \fB\-l\fP указываются какие\-либо аргументы, то \fBkill\fP выводит названия сигналов, соответствующих аргументам, а возвращаемый статус равен 0. Аргумент \fIexit_status\fP для \fB\-l\fP \- это число, указывающее либо номер сигнала, либо статус завершения процесса, завершенного сигналом; если он указан, то \fBkill\fP выводит название сигнала, который вызвал завершение процесса. \fBkill\fP предполагает, что все статусы завершения процесса больше 128; всё, что меньше этого значения, является номером сигнала. Опция \fB\-L\fP эквивалентна опции \fB\-l\fP. .IP Команда \fBkill\fP возвращает значение true, если хотя бы один сигнал был успешно отправлен, или значение false, если произошла ошибка или обнаружена недопустимая опция. .TP \fBlet\fP \fIarg\fP [\fIarg\fP .\|.\|.] Каждый аргумент \fIarg\fP вычисляется как арифметическое выражение (смотрите раздел .SM \fBАРИФМЕТИЧЕСКИЕ ВЫЧИСЛЕНИЯ\fP .ie \n(zZ=1 in \fIbash\fP(1)). .el above). Если последнее значение \fIarg\fP равно 0, то \fBlet\fP возвращает 1; в противном случае \fBlet\fP возвращает 0. .TP \fBlocal\fP [\fIoption\fP] [\fIname\fP[=\fIvalue\fP] .\|.\|. | \- ] Для каждого аргумента создать локальную переменную с названием \fIname\fP и присвойте ей значение \fIvalue\fP. Опция \fIoption\fP может быть любой из опций, принятых в \fBdeclare\fP. Когда команда \fBlocal\fP используется внутри функции, то это приводит к тому, что переменная \fIname\fP имеет видимую область действия, ограниченную этой функцией и ее дочерними элементами. Использование команды \fBlocal\fP вне функции является ошибкой. .IP Если \fIname\fP определено, то это делает набор опций оболочки локальным для функции, в которой вызывается команда \fBlocal\fP: все опции оболочки, измененные с помощью \fBset\fP, встроенной в функцию, после вызова \fBlocal\fP восстанавливаются к их исходным значениям, когда функция возвращает значение. Восстановление выполняется так, как если бы была выполнена серия команд \fBset\fP для восстановления значений, которые были на месте до запуска функции. .IP Без операндов \fBlocal\fP выводит список локальных переменных на стандартный вывод. .IP Возвращаемый статус равен 0, если только \fBlocal\fP не используется вне функции, не указано недопустимое \fIname\fP или \fIname\fP не является переменной, доступной только для чтения. .TP \fBlogout [\fP\fIn\fP\fB]\fP Выйти из оболочки, вернув родительской оболочке статус \fIn\fP. .TP \fBmapfile\fP [\fB\-d\fP \fIdelim\fP] [\fB\-n\fP \fIcount\fP] [\fB\-O\fP \fIorigin\fP] [\fB\-s\fP \fIcount\fP] [\fB\-t\fP] [\fB\-u\fP \fIfd\fP] [\fB\-C\fP \fIcallback\fP] [\fB\-c\fP \fIquantum\fP] [\fIarray\fP] .PD 0 .TP \fBreadarray\fP [\fB\-d\fP \fIdelim\fP] [\fB\-n\fP \fIcount\fP] [\fB\-O\fP \fIorigin\fP] [\fB\-s\fP \fIcount\fP] [\fB\-t\fP] [\fB\-u\fP \fIfd\fP] [\fB\-C\fP \fIcallback\fP] [\fB\-c\fP \fIquantum\fP] [\fIarray\fP] .PD Считать строки из стандартного ввода или из файлового дескриптора \fIfd\fP, если указана опция \fB\-u\fP, в переменную индексированного массива I\fIarray\fP. Переменная .SM \fBMAPFILE\fP по умолчанию является \fIarray\fP. Опции, если они указаны, имеют следующие значения: .RS .PD 0 .TP \fB\-d\fP Использовать первый символ \fIdelim\fP для завершения каждой строки ввода, а не символ новой строки. Если \fIdelim\fP является пустой строкой, то \fBmapfile\fP завершит строку, когда будет считан символ NUL. .TP \fB\-n\fP Скопировать не более строк \fIcount\fP. Если значение \fIcount\fP равно 0, то скопировать все строки. .TP \fB\-O\fP Начать присвоение массиву \fIarray\fP с индексом \fIorigin\fP. Индекс по умолчанию равен 0. .TP \fB\-s\fP Отбросить первые прочитанные строки \fIcount\fP. .TP \fB\-t\fP Удалить завершающий символ \fIdelim\fP (новая строка по умолчанию) из каждой прочитанной строки. .TP \fB\-u\fP Считывать строки из файлового дескриптора \fIfd\fP вместо стандартного ввода. .TP \fB\-C\fP Вычислять \fIcallback\fP при каждом чтении строк \fIquantum\fP. Опция \fB\-c\fP указывает \fIquantum\fP. .TP \fB\-c\fP Указывать количество строк, прочитанных между каждым вызовом \fIcallback\fP. .PD .RE .IP Если \fB\-C\fP указано без \fB\-c\fP, то значение по умолчанию равно 5000. При вычислении значения "обратный вызов" \fIcallback\fP в качестве дополнительных аргументов указывается индекс следующего элемента массива, который должен быть назначен, и строка, которая должна быть назначена этому элементу. \fIcallback\fP вычисляется после чтения строки, но до назначения элемента массива. .IP Если не указано явное происхождение, то \fBmapfile\fP очистит массив \fIarray\fP перед назначением ему. .IP \fBmapfile\fP возвращает ноль, если не указана недопустимая опция или аргумент опции \fIarray\fP недопустим или не может быть назначен, или если \fIarray\fP не является индексированным массивом. .TP \fBpopd\fP [\-\fBn\fP] [+\fIn\fP] [\-\fIn\fP] Удалить записи из стека каталогов. Элементы нумеруются от 0, начиная с первого каталога, указанного в \fBdirs\fP, поэтому \fBpopd\fP эквивалентно .Q "popd +0." При отсутствии аргументов \fBpopd\fP удаляет верхний каталог из стека и изменяет его на новый верхний каталог. Аргументы, если они указаны, имеют следующие значения: .RS .PD 0 .TP \fB\-n\fP Подавлять обычное изменение каталога при удалении каталогов из стека и манипулировать только стеком. .TP \fB+\fP\fIn\fP Удалить из стека \fIn\fP\-ю запись, отсчитываемую слева от списка, показанного \fBdirs\fP, начиная с нуля. Например: .Q "popd +0" удаляет первый каталог, .Q "popd +1" затем второй. .TP \fB\-\fP\fIn\fP Удалить \fIn\fP\-ю запись, отсчитываемую справа от списка, показанного с помощью \fBdirs\fP, начиная с нуля. Например: .Q "popd \-0" удаляет последний каталог, .Q "popd \-1" затем, предпоследний. .PD .RE .IP Если верхний элемент стека каталогов изменен, а значение \fI\-n\fP не было указано, то \fBpopd\fP использует встроенную команду \fBcd\fP для перехода к каталогу, расположенному в верхней части стека. Если \fBcd\fP завершается ошибкой, то \fBpopd\fP возвращает ненулевое значение. .IP В противном случае, \fBpopd\fP возвращает значение false, если указана недопустимая опция, стек каталогов пуст или \fIn\fP указывает несуществующую запись в стеке каталогов. .IP Если команда \fBpopd\fP выполнена успешно, то \fBbash\fP запускает \fBdirs\fP, чтобы отобразить окончательное содержимое стека каталогов, а возвращаемый статус равен 0. .TP \fBprintf\fP [\fB\-v\fP \fIvar\fP] \fIformat\fP [\fIarguments\fP] Записать отформатированные аргументы \fIarguments\fP в стандартный вывод под управлением \fIformat\fP. Опция \fB\-v\fP присваивает выходные данные переменной \fIvar\fP вместо того, чтобы выводить их на стандартный вывод. .IP Формат \fIformat\fP \- это символьная строка, содержащая объекты трех типов: обычные символы, которые просто копируются в стандартный вывод, управляющие последовательности символов, которые преобразуются и копируются в стандартный вывод и спецификации формата, каждая из которых приводит к выводу следующего за ней аргумента \fIargument\fP. В дополнение к стандартным символам формата \fIprintf\fP(3) и \fBcCsSndiouxXeEfFgGaA\fP, команда \fBprintf\fP интерпретирует следующие дополнительные спецификаторы формата: .RS .PD 0 .TP \fB%b\fP приводит к тому, что \fBprintf\fP расширяет управляющие последовательности с обратной косой чертой в соответствующем аргументе \fIargument\fP таким же образом, как и \fBecho \-e\fP. .TP \fB%q\fP приводит к тому, что команда \fBprintf\fP выводит соответствующий аргумент \fIargument\fP в формате, который может быть повторно использован в качестве входных данных оболочки. \fB%q\fP и \fB%Q\fP используют стиль кавычек \fB$\*'\*'\fP, если этого требуют какие\-либо символы в строке аргумента и кавычки с обратной косой чертой в противном случае. Если в строке формата используется альтернативная форма команды \fIprintf\fP, то эти два формата заключают строку аргумента в одинарные кавычки. .TP \fB%Q\fP тоже, что и \fB%q\fP, но применяет любую указанную точность к аргументу \fIargument\fP, прежде чем заключать его в кавычки. .TP \fB%(\fP\fIdatefmt\fP\fB)T\fP приводит к тому, что команда \fBprintf\fP выводит строку даты и времени, полученную в результате использования \fIdatefmt\fP в качестве строки формата для \fIstrftime\fP(3). Соответствующий аргумент \fIargument\fP \- это целое число, представляющее количество секунд, прошедших с начала эпохи. Этот спецификатор формата распознает два специальных значения аргумента: \-1 представляет текущее время, а \-2 \- время вызова оболочки. Если аргумент не указан, то преобразование выполняется так, как если бы было указано значение \-1. Это исключение из обычного поведения \fBprintf\fP. .PD .RE .IP Все спецификаторы формата %b, %q и %T используют аргументы ширины поля и точности из спецификации формата и записывают это количество байт (или используют поле такой ширины) в расширенный аргумент, который обычно содержит больше символов, чем исходный. .IP Спецификатор формата %n принимает соответствующий аргумент, который обрабатывается как название переменной оболочки. .IP .\" .IP .\" The %s format specifier understands the "altform" flag (#) and behaves .\" identically to the %b format specifier if it's supplied. Спецификаторы формата %s и %c принимают модификатор l (длинный), который заставляет их преобразовывать строку аргумента в строку с широким символом и применять любую указанную ширину поля и точность в символах, а не в байтах. Спецификаторы формата %S и %C эквивалентны %ls и %lc, соответственно. .IP Аргументы для спецификаторов нестрокового формата обрабатываются как константы языка Си, за исключением того, что допускается использование начального знака плюс или минус, а если начальный символ представляет собой одинарную или двойную кавычку, то значением является числовое значение следующего символа с использованием текущей локали. .IP Формат \fIformat\fP используется повторно по мере необходимости для использования всех аргументов \fIarguments\fP. Если для \fIformat\fP требуется больше \fIarguments\fP, чем указано, то дополнительные спецификации формата ведут себя так, как если бы было указано нулевое значение или нулевая строка, в зависимости от обстоятельств. Возвращаемое значение равно нулю в случае успешного выполнения и не равно нулю, если указан недопустимая опция или произошла ошибка записи или присвоения. .TP \fBpushd\fP [\fB\-n\fP] [+\fIn\fP] [\-\fIn\fP] .PD 0 .TP \fBpushd\fP [\fB\-n\fP] [\fIdir\fP] .PD Добавить каталог в верхнюю часть стека каталогов или повернуть стек, сделав новую верхнюю часть стека текущей рабочей директорией. При отсутствии аргументов \fBpushd\fP заменяет два верхних элемента стека каталогов. Аргументы, если они указаны, имеют следующие значения: .RS .PD 0 .TP \fB\-n\fP Подавлять обычную смену каталогов при ротации или добавлении каталогов в стек, манипулировать только стеком. .TP \fB+\fP\fIn\fP Повернуть стек так, чтобы \fIn\fP\-й каталог (считая слева от списка, показанного \fBdirs\fP, начиная с нуля) находился вверху. .TP \fB\-\fP\fIn\fP Поворачивает стек так, чтобы \fIn\fP\-й каталог (считая справа от списка, показанного \fBdirs\fP, начиная с нуля) находился вверху. .TP \fIdir\fP Добавить каталог \fIdir\fP в стек каталогов вверху. .PD .RE .IP После изменения стека, если опция \fB\-n\fP не была указана, то \fBpushd\fP использует встроенную команду \fBcd\fP для перехода в каталог, расположенный в верхней части стека. Если \fBcd\fP завершается ошибкой, то \fBpushd\fP возвращает ненулевое значение. .IP В противном случае, если аргументы не указаны, то \fBpushd\fP возвращает ноль, если только стек каталогов не пуст. При смене стека каталогов \fBpushd\fP возвращает ноль, если только стек каталогов не пуст или если \fIn\fP не указывает несуществующий элемент стека каталогов. .IP Если команда \fBpushd\fP выполнена успешно, то \fBbash\fP запускает \fBdirs\fP, чтобы показать окончательное содержимое стека каталогов. .TP \fBpwd\fP [\fB\-LP\fP] Вывести абсолютный путь к текущему рабочему каталогу. Выведенное название пути не содержит символических ссылок, если указана опция \fB\-P\fP или включена опция \fB\-o physical\fP для встроенной команды \fBset\fP. Если используется опция \fB\-L\fP, то выводимый путь может содержать символьные ссылки. Возвращаемый статус равен 0, если только при чтении названия текущего каталога не возникает ошибка или не указана недопустимая опция. .TP \fBread\fP [\fB\-Eers\fP] [\fB\-a\fP \fIaname\fP] [\fB\-d\fP \fIdelim\fP] [\fB\-i\fP \fItext\fP] [\fB\-n\fP \fInchars\fP] [\fB\-N\fP \fInchars\fP] [\fB\-p\fP \fIprompt\fP] [\fB\-t\fP \fItimeout\fP] [\fB\-u\fP \fIfd\fP] [\fIname\fP .\|.\|.] Прочитать одну строку из стандартного ввода или из файлового дескриптора, который \fIfd\fP предоставил в качестве аргумента опции \fB\-u\fP, разделить ее на слова, как описано .ie \n(zZ=1 in \fIbash\fP (1) .el above в подразделе \fBРазделение слов\fP и присвоить первое слово первому \fIname\fP, второе слово второму \fIname\fP и так далее. Если слов больше, чем названий, то оставшиеся слова и разделители между ними присваиваются последнему \fIname\fP. Если из входного потока считывается меньше слов, чем наименований, то оставшимся именованиям присваиваются пустые значения. Символы в значении переменной .SM \fBIFS\fP используются для разбиения строки на слова с использованием тех же правил, которые оболочка использует для расширения (описано .ie \n(zZ=1 in \fIbash\fP (1) .el above в подразделе \fBРазделение слов\fP). Символ обратной косой черты (\fB\e\fP) устраняет любое специальное значение для следующего считываемого символа и используется для продолжения строки. .IP Опции, если они указаны, имеют следующие значения: .RS .PD 0 .TP \fB\-a \fP\fIaname\fP Слова присваиваются последовательным индексам переменной массива \fIaname\fP, начиная с 0. Значение \fIaname\fP не задается до присвоения каких\-либо новых значений. Другие аргументы \fIname\fP игнорируются. .TP \fB\-d \fP\fIdelim\fP Первый символ \fIdelim\fP завершает строку ввода, а не символ новой строки. Если \fIdelim\fP является пустой строкой, то команда \fBread\fP завершит строку, когда будет считан символ NUL. .TP \fB\-e\fP Если стандартный ввод поступает с терминала, то \fBread\fP использует \fBreadline\fP (смотрите раздел .SM \fBБИБЛИОТЕКА READLINE\fP .ie \n(zZ=1 in \fIbash\fP(1)) .el above) чтобы получить строку. В библиотеке \fBReadline\fP используются текущие настройки редактирования (или настройки по умолчанию, если редактирование строки ранее не было активным), но используется заполнение названия файла \fBReadline\fP по умолчанию. .TP \fB\-E\fP Если стандартный ввод поступает с терминала, то \fBread\fP использует \fBreadline\fP (смотрите раздел .SM \fBБИБЛИОТЕКА READLINE\fP .ie \n(zZ=1 in \fIbash\fP(1)) .el above) чтобы получить строку. В библиотеке \fBReadline\fP использует текущие настройки редактирования (или настройки по умолчанию, если редактирование строки ранее не было активным), но она использует завершение по умолчанию в bash, включая программируемое завершение. .TP \fB\-i \fP\fItext\fP Если для чтения строки используется библиотека \fBreadline\fP, то \fBread\fP помещает текст \fItext\fP в буфер редактирования перед началом редактирования. .TP \fB\-n \fP\fInchars\fP \fBread\fP возвращает значение после прочтения символов \fInchars\fP, не дожидаясь полной строки ввода, если только не встречается задержка EOF или \fBread\fP, но учитывает разделитель, если перед разделителем прочитано меньше символов \fInchars\fP. .TP \fB\-N \fP\fInchars\fP \fBread\fP возвращает значение после прочтения ровно \fInchars\fP символов, а не после ожидания полной строки ввода, если только она не столкнется с EOF или истечением времени ожидания \fBread\fP. Любые символы\-разделители во входных данных не обрабатываются специальным образом и не вызывают возврата \fBread\fP до тех пор, пока не будут прочитаны символы \fInchars\fP. Результат не разбивается на символы в \fBIFS\fP; цель состоит в том, чтобы переменной присваивались именно те символы, которые считываются (за исключением обратной косой черты; смотрите опцию \fB\-r\fP ниже). .TP \fB\-p \fP\fIprompt\fP Выводите запрос \fIprompt\fP при стандартной ошибке без перевода строки в конце, прежде чем пытаться прочитать какие\-либо входные данные, но только если входные данные поступают с терминала. .TP \fB\-r\fP Обратная косая черта не используется в качестве экранирующего символа. Обратная косая черта считается частью строки. В частности, пара обратная косая черта\-новая строка не может использоваться в качестве продолжения строки. .TP \fB\-s\fP "Тихий" режим. Если ввод данных осуществляется с терминала, символы не отображаются. .TP \fB\-t \fP\fItimeout\fP Переводит команду \fBread\fP в режим ожидания и возвращает ошибку, если она не считывает всю строку ввода (или указанное количество символов) в течение секунд тайм\-аута \fItimeout\fP. Тайм\-аут \fItimeout\fP может быть десятичным числом с дробной частью, следующей за запятой. Эта опция эффективна только в том случае, если \fBread\fP считывает входные данные с терминала, канала или другого специального файла; при чтении из обычных файлов она не действует. Если время ожидания \fBread\fP истекло, то все частичные входные данные, считанные в указанную переменную \fIname\fP, сохраняются, а статус завершения превышает 128. Если значение \fItimeout\fP равно 0, то команда \fBread\fP немедленно возвращается, не пытаясь прочитать какие\-либо данные. В этом случае статус завершения равен 0, если для указанного файлового дескриптора доступны входные данные или, в противном случае, команда read вернет значение EOF, отличное от нуля. .TP \fB\-u \fP\fIfd\fP Команда read считывает входные данные из файлового дескриптора \fIfd\fP вместо стандартного ввода. .PD .RE .IP За исключением случая, когда \fIdelim\fP является пустой строкой, тогда команда \fBread\fP игнорирует любые символы NUL во входных данных. .IP Если названия \fInames\fP не указаны, то команда \fBread\fP присваивает строку чтения без конечного разделителя, но в остальном без изменений, переменной .SM \fBREPLY\fP. .IP Статус завершения равен нулю, если только не обнаружен конец файла или не окончен тайм\-аут \fBread\fP (в этом случае значение состояния превышает 128), ошибка назначения переменной (например, присвоение переменной, доступной только для чтения) или неверный файловый дескриптор указан в качестве аргумента для \fB\-u\fP. .TP \fBreadonly\fP [\fB\-aAf\fP] [\fB\-p\fP] [\fIname\fP[=\fIword\fP] .\|.\|.] .PD Указанные именования \fInames\fP помечены как доступные только для чтения; значения этих \fInames\fP не могут быть изменены при последующем присвоении или отмене. Если указана опция \fB\-f\fP, то каждое \fInames\fP ссылается на функцию оболочки. Опция \fB\-a\fP ограничивает переменные индексированными массивами; опция \fB\-A\fP ограничивает переменные ассоциативными массивами. Если указаны обе опции, то приоритет имеет опция \fB\-A\fP. Если аргументы \fIname\fP не указаны или если указана опция \fB\-p\fP, то выводится список всех названий, доступных только для чтения. Другие опции могут использоваться для ограничения вывода подмножеством набора названий, доступных только для чтения. Опция \fB\-p\fP выводит выходные данные в формате, который может быть повторно использован в качестве входных данных. .IP Библиотека \fBreadonly\fP позволяет устанавливать значение переменной одновременно с изменением атрибута readonly только для чтения , если после названия переменной ввести =\fIvalue\fP. При этом значение переменной будет равно \fIvalue\fP, а атрибут readonly только для чтения будет изменен. .IP Возвращаемый статус равен 0, если только не обнаружена недопустимая опция или одно из \fInames\fP не является допустимым наименованием переменной оболочки или \fB\-f\fP не содержит \fIname\fP , которое не является функцией. .TP \fBreturn\fP [\fIn\fP] Остановить выполнение функции оболочки или исполняемого файла и вернуть вызывающей стороне значение, указанное в \fIn\fP. Если \fIn\fP опущено, то возвращаемый статус соответствует статусу последней выполненной команды. Если \fBreturn\fP выполняется обработчиком перехвата, то последняя команда, используемая для определения статуса, является последней командой, выполненной перед обработчиком перехвата. Если \fBreturn\fP выполняется во время перехвата \fBDEBUG\fP,то последняя команда, используемая для определения статуса, является последней командой, выполненной обработчиком перехвата перед вызовом \fBreturn\fP. .IP Когда \fBreturn\fP используется для завершения выполнения скрипта, выполняемого командой \fB.\fP (\fBsource\fP), то это приводит к тому, что оболочка прекращает выполнение этого скрипта и возвращает либо \fIn\fP, либо статус завершения последней команды, выполненной в скрипте, в качестве выхода статус скрипта. Если указано значение \fIn\fP, то возвращаемое значение равно его младшим 8 битам. .IP Любая команда, связанная с ловушкой \fBRETURN\fP, выполняется до того, как выполнение возобновится после выполнения функции или скрипта. .IP Статус возврата отличен от нуля, если \fBreturn\fP задается в качестве нечислового аргумента или используется вне функции, а не во время выполнения скрипта с помощью \fB.\fP\^ или \fBsource\fP. .TP \fBset\fP [\fB\-abefhkmnptuvxBCEHPT\fP] [\fB\-o\fP \fIoption\-name\fP] [\fB\-\-\fP] [\fB\-\fP] [\fIarg\fP .\|.\|.] .PD 0 .TP \fBset\fP [\fB+abefhkmnptuvxBCEHPT\fP] [\fB+o\fP \fIoption\-name\fP] [\fB\-\-\fP] [\fB\-\fP] [\fIarg\fP .\|.\|.] .TP \fBset \-o\fP .TP \fBset +o\fP .PD Без опций отображать название и значение каждой переменной оболочки в формате, который можно повторно использовать в качестве входных данных для установки или сброса текущих переменных. Переменные, доступные только для чтения, не могут быть сброшены. В режиме posix отображаются только переменные оболочки. Выходные данные сортируются в соответствии с текущей локалью. Если заданы опции, то они устанавливают или отменяют установку атрибутов оболочки. Все аргументы, оставшиеся после обработки опций, рассматриваются как значения позиционных параметров и присваиваются по порядку \fB$1\fP, \fB$2\fP, \&.\|.\|., \fB$\fP\fIn\fP. Опции, если они указаны, имеют следующие значения: .RS .PD 0 .TP 8 \fB\-a\fP Каждой создаваемой или изменяемой переменной или функции присваивается атрибут export, который помечается для экспорта в окружающую среду последующих команд. .TP 8 \fB\-b\fP Сообщать о состоянии завершенных фоновых заданий немедленно, а не до появления следующего основного запроса или после завершения выполнения команды переднего плана. Это действует только при включенном управлении заданиями. .TP 8 \fB\-e\fP .PD Немедленно завершить работу, если используется конвейер \fIpipeline\fP (который может состоять из одной простой команды \fIsimple command\fP), списка \fIlist\fPили составной команды \fIcompound command\fP (смотрите раздел .SM \fBГРАММАТИКА ОБОЛОЧКИ\fP .ie \n(zZ=1 in \fIbash\fP(1)), .el above), завершает работу с ненулевым статусом. Оболочка не завершает работу, если команда, которая завершилась ошибкой, является частью списка команд, следующего непосредственно за зарезервированным словом \fBwhile\fP или \fBuntil\fP, частью теста, следующего за зарезервированными словами \fBif\fP или \fBelif\fP, частью любой команды, выполняемой в \fB&&\fP или перечислении \fB||\fP, за исключением команды, следующей за последней \fB&&\fP или \fB||\fP, любую команду в конвейере, кроме последней (в зависимости от состояния опции оболочки \fBpipefail\fP) или если возвращаемое значение команды инвертируется с помощью \fB!\fP. Если составная команда, отличная от подоболочки, возвращает ненулевой статус из\-за сбоя команды, в то время как \fB\-e\fP игнорировалась, то оболочка не завершает работу. Если задана ошибка в \fBERR\fP, то она выполняется до завершения работы оболочки. Эта опция применяется к среде оболочки и каждой среде подоболочки в отдельности (смотрите раздел .SM \fBСРЕДА ВЫПОЛНЕНИЯ КОМАНД\fP .ie \n(zZ=1 in \fIbash\fP(1)), .el above), и может привести к завершению работы подоболочек перед выполнением всех команд в подоболочке. .IP Если составная команда или функция оболочки выполняется в контексте, где \fB\-e\fP игнорируется, ни на одну из команд, выполняемых в теле составной команды или функции, не повлияет \fB\-e\fP, даже если \fB\-e\fP установлено и команда возвращает статус ошибки. Если составная команда или функция оболочки устанавливает значение \fB\-e\fP при выполнении в контексте, где значение \fB\-e\fP игнорируется, то эта настройка не будет иметь никакого эффекта до завершения выполнения составной команды или команды, содержащей вызов функции. .PD 0 .TP 8 \fB\-f\fP Отключение расширения названия пути. .TP 8 \fB\-h\fP Запоминать расположение команд при их поиске для выполнения. По умолчанию эта функция включена. .TP 8 \fB\-k\fP Все аргументы в виде операторов присваивания поместить в окружающую среду команды, а не только те, которые предшествуют названию команды. .TP 8 \fB\-m\fP Режим мониторинга. Включено управление заданиями. Эта опция включена по умолчанию для интерактивных оболочек в системах, которые ее поддерживают (смотрите раздел .SM \fBУПРАВЛЕНИЕ ЗАДАНИЯМИ\fP .ie \n(zZ=1 in \fIbash\fP(1)). .el above). Все процессы выполняются в отдельной группе процессов. Когда фоновое задание завершается, тогда оболочка выводит строку, содержащую статус завершения. .TP 8 \fB\-n\fP Считывать команды, но не выполнять их. Это может использоваться для проверки сценария оболочки на наличие синтаксических ошибок. Интерактивные оболочки это игнорируют. .TP 8 \fB\-o \fP\fIoption\-name\fP Значение \fIoption\-name\fP может быть одним из следующих: .RS .TP 8 \fBallexport\fP То же, что \fB\-a\fP. .TP 8 \fBbraceexpand\fP То же, что \fB\-B\fP. .TP 8 \fBemacs\fP Использовать интерфейс редактирования командной строки в стиле emacs. Это включено по умолчанию, когда оболочка является интерактивной, если только оболочка не запускается с опцией \fB\-\-noediting\fP. Это также влияет на интерфейс редактирования, используемый для \fBread \-e\fP. .TP 8 \fBerrexit\fP То же, что \fB\-e\fP. .TP 8 \fBerrtrace\fP То же, что \fB\-E\fP. .TP 8 \fBfunctrace\fP То же, что \fB\-T\fP. .TP 8 \fBhashall\fP То же,что \fB\-h\fP. .TP 8 \fBhistexpand\fP То же, что \fB\-H\fP. .TP 8 \fBhistory\fP Включить журнал истории команд, как описано выше .ie \n(zZ=1 in \fIbash\fP(1) .el above в разделе .SM \fBИСТОРИЯ\fP. Эта опция включена по умолчанию при работе оболочки в интерактивном режиме. .TP 8 \fBignoreeof\fP Эффект такой, как если бы команда оболочки .QN IGNOREEOF=10 была выполнена (смотрите подраздел \fBПеременные оболочки\fP .ie \n(zZ=1 in \fIbash\fP(1)). .el above). .TP 8 \fBkeyword\fP То же, что \fB\-k\fP. .TP 8 \fBmonitor\fP То же, что \fB\-m\fP. .TP 8 \fBnoclobber\fP То же, что \fB\-C\fP. .TP 8 \fBnoexec\fP То же, что \fB\-n\fP. .TP 8 \fBnoglob\fP То же, что \fB\-f\fP. .TP 8 \fBnolog\fP В настоящее время игнорируется. .TP 8 \fBnotify\fP То же, что \fB\-b\fP. .TP 8 \fBnounset\fP То же, что \fB\-u\fP. .TP 8 \fBonecmd\fP То же, что \fB\-t\fP. .TP 8 \fBphysical\fP То же, что \fB\-P\fP. .TP 8 \fBpipefail\fP Если задано, возвращаемое значение конвейера равно значению последней (самой правой) команды, которая завершается с ненулевым статусом, или равно нулю, если все команды в конвейере завершаются успешно. По умолчанию эта опция отключена. .TP 8 \fBposix\fP Включить режим posix; изменить поведение \fBbash\fP, в котором операции по умолчанию отличаются от стандартных операций для .SM POSIX , чтобы они соответствовали стандарту. Смотрите раздел .SM \fBСМОТРИТЕ ТАКЖЕ\fP .ie \n(zZ=1 in \fIbash\fP(1) .el below для получения ссылки на документ, в котором подробно описывается, как режим posix влияет на поведение bash. .TP 8 \fBprivileged\fP То же, что \fB\-p\fP. .TP 8 \fBverbose\fP То же, что \fB\-v\fP. .TP 8 \fBvi\fP Использовать интерфейс редактирования командной строки в стиле vi. Это также влияет на интерфейс редактирования, используемый для \fBread \-e\fP. .TP 8 \fBxtrace\fP То же, что \fB\-x\fP. .PP Если \fB\-o\fP указано без \fIoption\-name\fP, то команда \fBset\fP выводит текущие настройки опций оболочки. Если \fB+o\fP не содержит \fIoption\-name\fP, то \fBset\fP выводит серию команд \fBset\fP, чтобы воссоздать текущие настройки опций в стандартном выводе. .RE .TP 8 \fB\-p\fP Включить привилегированный режим \fIprivileged\fP. В этом режиме оболочка не считывает файлы .SM \fB$ENV\fP и .SM \fB$BASH_ENV\fP, функции оболочки не наследуются от окружающей среды, а переменные .SM \fBSHELLOPTS\fP, .SM \fBBASHOPTS\fP, .SM \fBCDPATH\fP и .SM \fBGLOBIGNORE\fP, если они появляются в среде, игнорируются. Если оболочка запущена с идентификатором эффективного пользователя (группы), который не равен реальному идентификатору пользователя (группы), а опция \fB\-p\fP не указана, то выполняются эти действия и в качестве эффективного идентификатора пользователя устанавливается реальный идентификатор пользователя. Если при запуске указана опция \fB\-p\fP, то действующий идентификатор пользователя не сбрасывается. При отключении этой опции для эффективных идентификаторов пользователя и группы будут установлены реальные идентификаторы пользователя и группы. .TP 8 \fB\-r\fP Включить режим ограниченного доступа оболочки. Если эта опция была установлена, её нельзя отменить. .TP 8 \fB\-t\fP Завершить работу после прочтения и выполнения одной команды. .TP 8 \fB\-u\fP Обрабатывать неустановленные переменные и параметры, отличные от специальных параметров .Q @ и .Q * , или переменные массива, подписанные .Q @ или .Q * , как ошибка при выполнении расширения параметра. Если выполняется попытка расширения для неустановленной переменной или параметра, то оболочка выводит сообщение об ошибке и, если она не является интерактивной, то завершает работу с ненулевым статусом. .TP 8 \fB\-v\fP Выводить строки ввода оболочки по мере их считывания. .TP 8 \fB\-x\fP После раскрытия каждой команды \fIsimple command\fP, команды \fBfor\fP, команды \fBcase\fP, команды \fBselect\fP или арифметической команды \fBfor\fP вывести на дисплей расширенное значение .SM \fBPS4\fP, за которым следует команда и ее расширенные аргументы или связанный с ними список слов, приводящий к стандартной ошибке. .TP 8 \fB\-B\fP Оболочка выполняет расширение скобок (смотрите подраздел \fBРасширение скобок\fP .ie \n(zZ=1 in \fIbash\fP(1)). .el above). Это включено по умолчанию. .TP 8 \fB\-C\fP Если задано, то \fBbash\fP не перезаписывает существующий файл с помощью операторов перенаправления \fB>\fP, \fB>&\fP и \fB<>\fP. Использование оператора перенаправления \fB>|\fP вместо \fB>\fP переопределит это и принудительно создаст выходной файл. .TP 8 \fB\-E\fP Если это установлено, то любая ошибка в \fBERR\fP наследуется функциями оболочки, заменами команд и командами, выполняемыми в окружающей среде подоболочки. В таких случаях ошибка \fBERR\fP обычно не наследуется. .TP 8 \fB\-H\fP Включить подстановку истории стилей \fB!\fP. Эта опция включена по умолчанию, когда оболочка является интерактивной. .TP 8 \fB\-P\fP Если это установлено, то оболочка не разрешает символьные ссылки при выполнении таких команд, как \fBcd\fP, которые изменяют текущий рабочий каталог. Вместо этого она использует физическую структуру каталогов. По умолчанию \fBbash\fP следует логической цепочке каталогов при выполнении команд, которые изменяют текущий каталог. .TP 8 \fB\-T\fP Если задано, то любые ловушки в \fBDEBUG\fP и \fBRETURN\fP наследуются функциями оболочки, заменами команд и командами, выполняемыми в окружающей среде подоболочки. Ловушки \fBDEBUG\fP и \fBRETURN\fP в таких случаях обычно не наследуются. .TP 8 \fB\-\-\fP Если за этой опцией не следует никаких аргументов, то отменить установку позиционных параметров. В противном случае установить для позиционных параметров значение аргументов \fIarg\fPдаже если некоторые из них начинаются с \fB\-\fP. .TP 8 \fB\-\fP Сообщить об окончании выбора опций и назначить все оставшиеся аргументы \fIarg\fP позиционным параметрам. Опции \fB\-x\fP и \fB\-v\fP отключить. Если нет аргументов \fIarg\fP, то позиционные параметры остаются неизменными. .PD .PP По умолчанию опции отключены, если не указано иное. Использование + вместо \- приводит к отключению этих опций. Опции также могут быть указаны в качестве аргументов при вызове оболочки. Текущий набор опций можно найти в \fB$\-\fP. Статус возврата всегда равен нулю, если только не встречается недопустимая опция. .RE .TP \fBshift\fP [\fIn\fP] Переименовать позиционные параметры из \fIn\fP+1 .\|.\|.\& в \fB$1\fP \fB.\|.\|..\fP Параметры, представленные числами от \fB$#\fP до \fB$#\fP\-\fIn\fP+1, не заданы. Значение \fIn\fP должно быть неотрицательным числом, меньшим или равным \fB$#\fP. Если \fIn\fP равно 0, то параметры не изменяются. Если \fIn\fP не задано, то предполагается, что оно равно 1. Если \fIn\fP больше, чем \fB$#\fP, то позиционные параметры не изменяются. Статус возврата больше нуля, если \fIn\fP больше, чем \fB$#\fP или меньше нуля; в противном случае статус возврата 0. .TP \fBshopt\fP [\fB\-pqsu\fP] [\fB\-o\fP] [\fIoptname\fP .\|.\|.] Изменить значения настроек, управляющих необязательным поведением оболочки. Это могут быть либо те настройки, которые перечислены ниже, либо, если используется опция \fB\-o\fP, то те, которые доступны с помощью опции \fB\-o\fP для встроенной команды \fBset\fP. .IP При отсутствии опций или при использовании опции \fB\-p\fP вывести на дисплей список всех настраиваемых опций с указанием того, установлена ли каждая из них; если указаны какие\-либо опции \fIoptnames\fP, то вывод будет ограничен этими опциями. Опция \fB\-p\fP отображает выходные данные в формате, которая может быть повторно использован в качестве входных данных. .IP Другие опции имеют следующие значения: .RS .PD 0 .TP \fB\-s\fP Включить (установить) каждое \fIoptname\fP. .TP \fB\-u\fP Выключить (сбросить) каждое \fIoptname\fP. .TP \fB\-q\fP Отключает обычный вывод (тихий режим); состояние возврата указывает, установлено или не установлено значение \fIoptname\fP. Если несколько аргументов \fIoptname\fP заданы с помощью \fB\-q\fP, то статус возврата равен нулю, если включены все аргументы \fIoptname\fP; в противном случае значение не равно нулю. .TP \fB\-o\fP Ограничивает значения \fIoptname\fP теми значениями, которые определены для опции \fB\-o\fP, встроенной командой \fBset\fP. .PD .PP Если либо \fB\-s\fP, либо \fB\-u\fP используется без аргументов \fIoptname\fP, то \fBshopt\fP отображает только те опции, которые установлены или не установлены соответственно. Если не указано иное, опции \fBshopt\fP по умолчанию отключены (unset). .PP Статус возврата в списке опций равен нулю, если включены все \fIoptnames\fP, в противном случае он не равен нулю. При установке или отмене настроек статус возврата равен нулю, если только \fIoptnames\fP не является допустимой опцией оболочки. .PP Список опций \fBshopt\fP выглядит следующим образом: .PP .PD 0 .TP 8 \fBarray_expand_once\fP Если задано, то оболочка подавляет многократное вычисление ассоциативных и индексированных индексов массива во время вычисления арифметического выражения, при выполнении встроенных команд, которые могут выполнять присвоение переменным, а также при выполнении встроенных команд, которые выполняют разыменование массива. .TP 8 \fBassoc_expand_once\fP Устаревший; синоним для \fBarray_expand_once\fP. .TP 8 \fBautocd\fP Если задано, название команды, являющееся названием каталога, то выполняется так, как если бы оно было аргументом команды \fBcd\fP. Эта опция используется только интерактивными оболочками. .TP 8 \fBbash_source_fullpath\fP Если задано, то названия файлов, добавленные в переменную массива \fBBASH_SOURCE\fP, преобразуются в полные пути (смотрите подраздел \fBПеременные оболочки\fP выше). .TP 8 \fBcdable_vars\fP Если задано, то предполагается, что аргументом встроенной команды \fBcd\fP, который не является каталогом, является название переменной, значение которой является каталогом для перехода. .TP 8 \fBcdspell\fP Если задано, то команда \fBcd\fP пытается исправить незначительные ошибки в написании компонента каталога. Незначительные ошибки включают в себя перенесенные символы, пропущенный символ и один дополнительный символ. Если \fBcd\fP исправляет название каталога, то она выводит исправленное название файла и команда выполняется. Эта опция используется только интерактивными оболочками. .TP 8 \fBcheckhash\fP Если задано, то \fBbash\fP проверяет, существует ли команда, найденная в хэш\-таблице, прежде чем пытаться ее выполнить. Если в хэш\-таблице команда больше не существует, то \fBbash\fP выполняет обычный поиск по пути. .TP 8 \fBcheckjobs\fP Если задано, то \fBbash\fP отображает статус всех остановленных и запущенных заданий перед выходом из интерактивной оболочки. Если выполняются какие\-либо задания, то \fBbash\fP откладывает выход до тех пор, пока не будет предпринята попытка второго выхода без промежуточной команды (смотрите раздел .SM \fBУПРАВЛЕНИЕ ЗАДАНИЯМИ\fP .ie \n(zZ=1 in \fIbash\fP(1)). .el above). Оболочка всегда откладывает выход из системы, если какие\-либо задания остановлены. .TP 8 \fBcheckwinsize\fP Если задано, то \fBbash\fP проверяет размер окна после каждой внешней (не встроенной) команды и, при необходимости, обновляет значения .SM \fBLINES\fP и .SM \fBCOLUMNS\fP, используя файловый дескриптор, связанный со стандартной ошибкой, если это терминал. Эта опция включена по умолчанию. .TP 8 \fBcmdhist\fP Если это установлено, то \fBbash\fP попытается сохранить все строки многострочной команды в одной и той же записи истории. Это позволяет легко повторно редактировать многострочные команды. Эта опция включена по умолчанию, но действует только в том случае, если включена история команд, как описано выше .ie \n(zZ=1 in \fIbash\fP(1) .el above согласно .SM \fBHISTORY\fP. .PD 0 .TP 8 \fBcompat31\fP .TP 8 \fBcompat32\fP .TP 8 \fBcompat40\fP .TP 8 \fBcompat41\fP .TP 8 \fBcompat42\fP .TP 8 \fBcompat43\fP .TP 8 \fBcompat44\fP .PD Эти значения определяют режим совместимости оболочки (смотрите раздел .SM \fBРЕЖИМ СОВМЕСТИМОСТИ ОБОЛОЧКИ\fP) .ie \n(zZ=1 in \fIbash\fP(1)). .el below). .PD 0 .TP 8 \fBcomplete_fullquote\fP Если задано, то \fBbash\fP заключает в кавычки все метасимволы оболочки в названиях файлов и каталогов при выполнении завершения. Если значение не задано, то \fBbash\fP удаляет метасимволы, такие как знак доллара, из набора символов, которые будут заключены в кавычки в завершенных названиях файлов, когда эти метасимволы появятся в ссылках на переменные оболочки в словах, которые должны быть завершены. Это означает, что знаки доллара в названиях переменных, которые расширяются до каталогов, не будут заключаться в кавычки; однако любые знаки доллара, появляющиеся в названиях файлов, также не будут заключаться в кавычки. Это дейсиует только тогда, когда bash использует обратную косую черту для указания завершенных названий файлов. Эта переменная установлена по умолчанию, что является стандартным поведением bash в версиях до 4.2. .TP 8 \fBdirexpand\fP Если задано, то \fBbash\fP заменяет названия каталогов результатами расширения слова при заполнении названия файла. Это изменяет содержимое буфера редактирования \fBreadline\fP. Если не задано, то \fBbash\fP пытается сохранить то, что ввел пользователь. .TP 8 \fBdirspell\fP Если это установлено, то \fBbash\fP попытается исправить орфографию в названиях каталогов во время ввода текста, если изначально указанное название каталога не существует. .TP 8 \fBdotglob\fP Если задано, то \fBbash\fP включает названия файлов, начинающиеся с .Q .\& результата расширения названия пути. В названии файлов .FN .\& и .FN ..\& всегда должно быть задано явное соответствие, даже если задано значение \fBdotglob\fP. .TP 8 \fBexecfail\fP Если задано, то неинтерактивная оболочка не завершит работу, если она не сможет выполнить файл, указанный в качестве аргумента для встроенной команды \fBexec\fP. Интерактивная оболочка не завершит работу, если \fBexec\fP завершится неудачно. .TP 8 \fBexpand_aliases\fP Если задано, то псевдонимы будут расширены, как описано выше .ie \n(zZ=1 in \fIbash\fP(1) .el above в разделе .SM \fBПСЕВДОНИМЫ\fP. Эта опция включена по умолчанию для интерактивных оболочек. .TP 8 \fBextdebug\fP Если задано при вызове оболочки или в файле запуска оболочки, то настройте выполнение профиля отладчика перед запуском оболочки, аналогично опции \fB\-\-debugger\fP. Если задано после вызова, то будет включено поведение, предназначенное для использования отладчиками: .RS .TP \fB1.\fP Опция \fB\-F\fP для встроенной команды \fBdeclare\fP отображает название исходного файла и номер строки, соответствующие каждому названию функции, указанному в качестве аргумента. .TP \fB2.\fP Если команда, запущенная с помощью ловушки \fBDEBUG\fP, то возвращается ненулевое значение, следующая команда пропускается и не выполняется. .TP \fB3.\fP Если команда, запущенная с помощью ловушки \fBDEBUG\fP, то возвращает значение 2, а оболочка выполняет подпрограмму (функцию оболочки или сценарий оболочки, выполняемый встроенными командами \fB.\fP или \fBsource\fP), то оболочка имитирует вызов \fBreturn\fP. .TP \fB4.\fP .SM \fBBASH_ARGC\fP и .SM \fBBASH_ARGV\fP обновляются в соответствии с их описаниями .ie \n(zZ=1 in \fIbash\fP(1)). .el above). .TP \fB5.\fP Включена трассировка функций: подстановка команд, функции оболочки и подоболочки, вызываемые с помощью \fB(\fP \fIcommand\fP \fB)\fP, наследуют ловушки \fBDEBUG\fP и \fBRETURN\fP. .TP \fB6.\fP Включено отслеживание ошибок: подстановка команд, функции оболочки и подоболочки, вызываемые с помощью \fB(\fP \fIcommand\fP \fB)\fP, наследуют ловушку \fBERR\fP. .RE .TP 8 \fBextglob\fP Если задано, то включить описанные расширенные свойства сопоставления с шаблоном .ie \n(zZ=1 in \fIbash\fP(1) .el above подраздел \fBРасширение названия пути\fP. .TP 8 \fBextquote\fP Если задано, то \fB$\fP\*'\fIstring\fP\*' и \fB$\fP\*"\fIstring\fP\*" заключаются в кавычки внутри расширений \fB${\fP\fIparameter\fP\fB}\fP, заключенных в двойные кавычки. Эта опция включена по умолчанию. .TP 8 \fBfailglob\fP Если заданы эти шаблоны, то названия файлов, которые не совпадают с шаблонами при расширении пути, приводят к ошибке расширения. .TP 8 \fBforce_fignore\fP Если значение задано, то суффиксы, заданные переменной оболочки .SM \fBFIGNORE\fP, приводят к тому, что слова игнорируются при выполнении завершения, даже если игнорируемые слова являются единственно возможными завершениями. Смотрите подраздел \fBПеременные оболочки\fP .ie \n(zZ=1 in \fIbash\fP(1) .el above описание .SM \fBFIGNORE\fP. Эта опция включена по умолчанию. .TP 8 \fBglobasciiranges\fP Если задано, то выражения диапазона, используемые в выражениях в скобках для сопоставления с шаблоном (смотрите .SM \fBСопоставление с шаблоном\fP .ie \n(zZ=1 in \fIbash\fP(1)) .el above) при выполнении сравнений вести себя так, как если бы использовался традиционный язык Си. То есть при сопоставлении с шаблоном не учитывать последовательность сопоставления в текущей локали, поэтому \fBb\fP не будет сопоставляться между \fBA\fP и \fBB\fP, а символы ASCII в верхнем и нижнем регистре будут сопоставляться вместе. .TP 8 \fBglobskipdots\fP Если это установлено, то расширение названия пути никогда не будет совпадать с названиями файлов .FN .\& и .FN ..\& , даже если шаблон начинается с .Q .\& . Эта опция включена по умолчанию. .TP 8 \fBglobstar\fP Если задано, то шаблон \fB**\fP, используемый в контексте расширения названия пути, будет соответствовать всем файлам и нулю или множеству каталогов и подкаталогов. Если за шаблоном следует \fB/\fP, то соответствуют только каталоги и подкаталоги. .TP 8 \fBgnu_errfmt\fP Если это установлено, то сообщения об ошибках оболочки записываются в стандартном формате сообщений об ошибках GNU. .TP 8 \fBhistappend\fP Если это установлено, то список истории добавляется к файлу, названному по значению переменной .SM \fBHISTFILE\fP, при выходе из оболочки, а не перезаписывает файл. .TP 8 \fBhistreedit\fP Если задано и используется библиотека \fBreadline\fP, то пользователю предоставляется возможность повторно отредактировать неудачную подстановку истории. .TP 8 \fBhistverify\fP Если задано и используется библиотека \fBreadline\fP, то результаты подстановки истории не передаются немедленно в синтаксический анализатор командной строки. Вместо этого результирующая строка загружается в буфер редактирования \fBreadline\fP, что позволяет вносить дальнейшие изменения. .TP 8 \fBhostcomplete\fP Если задано и используется библиотека \fBreadline\fP, то \fBbash\fP попытается выполнить завершение названия хоста при завершении слова, содержащего \fB@\fP (смотрите подраздел \fBЗавершение\fP в разделе .SM \fBБИБЛИОТЕКА READLINE\fP .ie \n(zZ=1 in \fIbash\fP(1)). .el above). Включено по умолчанию. .TP 8 \fBhuponexit\fP Если это установлено, то \fBbash\fP будет отправлять .SM \fBSIGHUP\fP всем заданиям при выходе из интерактивной оболочки. .TP 8 \fBinherit_errexit\fP Если задано, то при замене команд наследуется значение опции \fBerrexit\fP, а не отменяется её установка в среде подоболочки. Эта опция включена, когда включен режим posix. .TP 8 \fBinteractive_comments\fP В интерактивной оболочке слово, начинающееся с \fB#\fP, приводит к игнорированию этого слова и всех остальных символов в этой строке, как и в неинтерактивной оболочке (смотрите раздел .SM \fBКОММЕНТАРИИ\fP .ie \n(zZ=1 in \fIbash\fP(1)). .el above). Эта опция включена по умолчанию. .TP 8 \fBlastpipe\fP Если установлено, а управление заданиями не активировано, то оболочка запускает последнюю команду конвейера, которая не выполняется в фоновом режиме в текущей окружающей среде оболочки. .TP 8 \fBlithist\fP Если это установлено и включена опция \fBcmdhist\fP, то многострочные команды сохраняются в журнале со встроенными символами новой строки, а не с использованием разделителей в виде точки с запятой, где это возможно. .TP 8 \fBlocalvar_inherit\fP Если задано, то локальные переменные наследуют значение и атрибуты переменной с таким же названием, которое существовало в предыдущей области видимости, до присвоения какого\-либо нового значения. Атрибут nameref не наследуется. .TP 8 \fBlocalvar_unset\fP Если задано, то вызов \fBunset\fP для локальных переменных в предыдущих областях действия функции помечает их, чтобы при последующем поиске они не были заданы, пока функция не вернется. Это аналогично сбросу настроек локальных переменных в текущей области видимости функции. .TP 8 \fBlogin_shell\fP Оболочка устанавливает эту опцию, если она запущена как оболочка входа в систему (смотрите раздел .SM \fBВЫЗОВ\fP .ie \n(zZ=1 in \fIbash\fP(1)). .el above). Это значение не может быть изменено. .TP 8 \fBmailwarn\fP Если задано и к файлу, который \fBbash\fP проверяет на наличие почты, был получен доступ с момента последней проверки, то \fBbash\fP выведет сообщение на дисплей .Q "The mail in \fImailfile\fP has been read" . .TP 8 \fBno_empty_cmd_completion\fP Если задано и используется \fBreadline\fP, то \fBbash\fP не выполняет поиск .SM \fBPATH\fP для возможных завершений при попытке завершения в пустой строке. .TP 8 \fBnocaseglob\fP Если задано, то \fBbash\fP сопоставляет названия файлов без учета регистра при расширении названия пути (смотрите подраздел \fBРасширение названия пути\fP .ie \n(zZ=1 in \fIbash\fP(1)). .el above). .TP 8 \fBnocasematch\fP Если задано, то \fBbash\fP сопоставляет шаблоны без учета регистра при выполнении сопоставления во время выполнения команд проверки условий \fBcase\fP или \fB[[\fP, при выполнении расширений слов для замены шаблонов или при фильтрации возможных завершений в рамках программируемого завершения. .TP 8 \fBnoexpand_translation\fP Если задано, то \fBbash\fP заключает транслируемые результаты \fB$\*"\fP.\|.\|.\& \fB\*"\fP и заключает их в одинарные кавычки вместо двойных. Если строка не транслируется, то это не имеет никакого эффекта. .TP 8 \fBnullglob\fP Если задано, то шаблоны расширения названия пути, которые не соответствуют ни одному файлу (смотрите \fBРасширение названия пути\fP .ie \n(zZ=1 in \fIbash\fP(1)) .el above) никак не расширяются и удаляются, вместо того чтобы расширяться сами по себе. .TP 8 \fBpatsub_replacement\fP Если задано, то \fBbash\fP расширяет вхождения \fB&\fP в строке замены шаблона до текста, соответствующего шаблону, как описано в подразделе \fBРасширение параметра\fP .ie \n(zZ=1 in \fIbash\fP(1). .el above. Эта опция включена по умолчанию. .TP 8 \fBprogcomp\fP Если задано, то включить программируемое завершение (смотрите подраздел \fBПрограммируемое завершение\fP .ie \n(zZ=1 in \fIbash\fP(1)). .el above). Эта опция включена по умолчанию. .TP 8 \fBprogcomp_alias\fP Если задано и включено программируемое завершение, то \fBbash\fP рассматривает название команды, которое не имеет завершений, как возможный псевдоним и пытается расширить псевдоним. Если у команды есть псевдоним, то \fBbash\fP пытается программно завершить, используемое командное слово, словом полученным из расширенного псевдонима. .TP 8 \fBpromptvars\fP Если это установлено, то строки запроса после расширения подвергаются расширению параметров, замене команд, арифметическому расширению и удалению кавычек, как описано в разделе .SM \fBЗАПРОС\fP .ie \n(zZ=1 in \fIbash\fP(1). .el above. Эта опция включена по умолчанию. .TP 8 \fBrestricted_shell\fP Оболочка устанавливает эту опцию, если она запущена в режиме с ограниченным доступом (смотрите раздел .SM \fBОБОЛОЧКА С ОГРАНИЧЕННЫМ ДОСТУПОМ\fP .ie \n(zZ=1 in \fIbash\fP(1)). .el below). Это значение не может быть изменено. Оно не сбрасывается при запуске файлов автозагрузки, позволяя файлам автозагрузки определять, имеет ли оболочка ограничения или нет. .TP 8 \fBshift_verbose\fP Если это установлено, то встроенная команда \fBshift\fP выводит сообщение об ошибке, когда количество сдвигов превышает количество позиционных параметров. .TP 8 \fBsourcepath\fP Если задано, то встроенная команда \fB.\fP (\fBsource\fP использует значение .SM \fBPATH\fP для поиска каталога, содержащего файл, указанный в качестве аргумента, если опция \fB\-p\fP не указана. По умолчанию эта опция включена. .TP 8 \fBvarredir_close\fP Если это установлено, то оболочка автоматически закрывает файловые дескрипторы, назначенные с использованием синтаксиса перенаправления \fI{varname}\fP (смотрите раздел .SM \fBПЕРЕНАПРАВЛЕНИЕ\fP .ie \n(zZ=1 in \fIbash\fP(1)) .el above) вместо того, чтобы оставлять их открытыми после завершения команды. .TP 8 \fBxpg_echo\fP Если задано, то встроенная команда \fBecho\fP, по умолчанию, расширяет escape\-последовательности с обратной косой чертой. Если также включена опция оболочки \fBposix\fP , то команда \fBecho\fP не интерпретирует никакие опции. .RE .PD .TP \fBsuspend\fP [\fB\-f\fP] Приостановить выполнение этой оболочки до тех пор, пока она не получит сигнал .SM \fBSIGCONT\fP. Оболочка при входе или оболочка без включенного управления заданиями не могут быть приостановлены; опция \fB\-f\fP переопределит это и принудительно приостановит их выполнение. Возвращаемый статус равен 0, если только оболочка не является оболочкой входа или если \fB\-f\fP не указано, а управление заданиями не включено. .TP \fBtest\fP \fIexpr\fP .PD 0 .TP \fB[\fP \fIexpr\fP \fB]\fP .PD Возвращает значение 0 (true)) или 1 (false) в зависимости от вычисления условного выражения \fIexpr\fP. Каждый оператор и операнд должен быть отдельным аргументом. Выражения состоят из основных компонентов, описанных .ie \n(zZ=1 in \fIbash\fP(1) .el above в разделе .SM \fBУСЛОВНЫЕ ВЫРАЖЕНИЯ\fP. \fBtest\fP не принимает никаких опций, а также не принимает и не игнорирует аргумент \fB\-\-\fP как обозначающий окончание опций. .IP Выражения могут быть объединены с помощью следующих операторов, перечисленных в порядке убывания приоритета. Вычисление зависит от количества аргументов; смотрите ниже. В команде \fBtest\fP используется приоритет операторов при наличии пяти или более аргументов. .RS .PD 0 .TP \fB! \fP\fIexpr\fP Истинно если \fIexpr\fP ложно. .TP \fB( \fP\fIexpr\fP\fB )\fP Возвращает значение \fIexpr\fP. Это может использоваться для переопределения обычного приоритета оператора. .TP \fIexpr1\fP \-\fBa\fP \fIexpr2\fP Истинно, если оба значения \fIexpr1\fP и \fIexpr2\fP являются истинными. .TP \fIexpr1\fP \-\fBo\fP \fIexpr2\fP Истинно, если одно из \fIexpr1\fP или \fIexpr2\fP является истинным. .PD .PP \fBtest\fP и \fB[\fP вычисляют условные выражения, используя набор правил, основанный на количестве аргументов. .PP .PD 0 .TP 0 аргументов Выражение ложно. .TP 1 argument Выражение истинно тогда и только тогда, когда аргумент не равен нулю. .TP 2 аргумента Если первый аргумент равен \fB!\fP, то выражение истинно тогда и только тогда, когда второй аргумент равен нулю. Если первым аргументом является одним из унарных условных операторов, перечисленных .ie \n(zZ=1 in \fIbash\fP(1) .el above в разделе .SM \fBУСЛОВНЫЕ ВЫРАЖЕНИЯ\fP, то выражение истинно, если выполняется унарный тест. Если первый аргумент не является допустимым унарным условным оператором, то выражение ложно. .TP 3 аргумента Следующие условия применяются в указанном порядке. Если вторым аргументом является один из перечисленных бинарных условных операторов .ie \n(zZ=1 in \fIbash\fP(1) .el above в соответствии с разделом .SM \fBУСЛОВНЫЕ ВЫРАЖЕНИЯ\fP, то результатом выражения является результат двоичного теста с использованием первого и третьего аргументов в качестве операндов. Операторы \fB\-a\fP и \fB\-o\fP считаются двоичными операторами при наличии трех аргументов. Если первым аргументом является \fB!\fP, то значение является инверсией двух аргументного теста с использованием второго и третьего аргументов. Если первый аргумент в точности равен \fB(\fP, а третий аргумент в точности равен \fB)\fP, то результатом будет проверка второго аргумента с помощью одного аргумента. В противном случае выражение будет ложным. .TP 4 аргумента Следующие условия применяются в указанном порядке. Если первым аргументом является \fB!\fP, то результатом является инверсия выражения из трех аргументов, составленного из остальных аргументов. Если первый аргумент в точности равен \fB(\fP, а четвертый аргумент в точности равен \fB)\fP, то результатом является проверка второго и третьего аргументов с помощью двух аргументов. В противном случае выражение анализируется и вычисляется в соответствии с приоритетом и с использованием правил, перечисленных выше. .TP 5 или более аргументов Выражение анализируется и вычисляется в соответствии с приоритетом с использованием правил, перечисленных выше. .PD .PP Когда оболочка находится в режиме posix или если выражение является частью команды \fB[[\fP, то операторы \fB<\fP и \fB>\fP выполняют сортировку с использованием текущей локали. Если оболочка не находится в режиме posix, то команды \fBtest\fP и \fB[\fP выполняют лексикографическую сортировку с использованием порядка ASCII. .PP Синтаксический анализ по историческому приоритету оператора с 4\-мя или более аргументами может привести к неоднозначностям при обнаружении строк, которые выглядят как основные. В стандарте .SM POSIX устарели основные символы \fB\-a\fP и \fB\-o\fP и выражения, заключенные в круглые скобки. Скрипты больше не должны их использовать. Гораздо надежнее ограничить тестовые вызовы одним основным и заменить использование \fB\-a\fP и \fB\-o\fP операторами оболочки \fB&&\fP и \fB||\fP. .RE .TP \fBtimes\fP Вывести суммарное пользовательское и системное время для оболочки и для процессов, запускаемых из оболочки. Возвращаемый статус равен 0. .TP \fBtrap\fP [\fB\-lpP\fP] [[\fIaction\fP] \fIsigspec\fP .\|.\|.] Команда \fIaction\fP \- это команда, которая считывается и выполняется, когда оболочка получает любой из сигналов \fIsigspec\fP. Если \fIaction\fP отсутствует (и есть \fIsigspec\fP) или \fB\-\fP, то каждый указанный \fIsigspec\fP сбрасывается до значения, которое он имел при запуске оболочки. Если \fIaction\fP является пустой строкой, то сигнал, указанный каждым \fIsigspec\fP, игнорируется оболочкой и вызываемыми ею командами. .IP Если аргументы не указаны, то \fBtrap\fP отображает действия, связанные с каждым перехваченным сигналом, в виде набора команд \fBtrap\fP, которые могут быть повторно использованы в качестве входных данных оболочки для восстановления текущего расположения сигналов. Если задана опция \fB\-p\fP, а \fIaction\fP отсутствует, то \fBtrap\fP отображает действия, связанные с каждым сигналом \fIsigspec\fP или, если они не заданы, то для всех перехваченных сигналов в виде набора команд \fBtrap\fP, которые могут быть повторно использованы в качестве входа оболочки для восстановления текущего расположения сигналов. Опция \fB\-P\fP ведет себя аналогично, но отображает только действия, связанные с каждым аргументом \fIsigspec\fP. Для опции \fB\-P\fP требуется как минимум один аргумент \fIsigspec\fP. Опции \fB\-P\fP или \fB\-p\fP могут использоваться в среде подоболочек (например, для подстановки команд) и, если они использовались до того, как \fBtrap\fP стала использоваться для изменения обработки сигнала, то они будут отображать состояние родительских ловушек. .IP Опция \fB\-l\fP выводит список названий сигналов и соответствующих им номеров. Каждый \fIsigspec\fP является либо названием сигнала, определенным в <\fIsignal.h\fP>, либо номером сигнала. В названиях сигналов регистр не учитывается, а префикс .SM \fBSIG\fP является необязательным. Если \fB\-l\fP указано без аргументов \fIsigspec\fP, то выводится список допустимых названий сигналов. .IP Если значение \fIsigspec\fP равно .SM \fBEXIT\fP (0), то \fIaction\fP выполняется при выходе из оболочки. Если \fIsigspec\fP равно .SM \fBDEBUG\fP, то \fIaction\fP выполняется перед каждой простой командой \fIsimple command\fP, командой \fIfor\fP, командой \fIcase\fP, командой \fIselect\fP, арифметической командой ((, командой проверки условия [[, арифметической командой \fIfor\fP и перед выполнением первой команды в функции оболочки (смотрите раздел .SM \fBГРАММАТИКА ОБОЛОЧКИ\fP .ie \n(zZ=1 in \fIbash\fP(1)). .el above). Обратитесь к описанию опции оболочки \fBextdebug\fP (смотрите \fBshopt\fP .ie \n(zZ=1 in \fIbash\fP(1)) .el above) для получения подробной информации о её влиянии на ловушку \fBDEBUG\fP. Если значение \fIsigspec\fP равно .SM \fBRETURN\fP, то \fIaction\fP выполняется каждый раз, когда завершается выполнение функции оболочки или скрипта, выполняемых встроенными командами \fB.\fP или \fBsource\fP. .IP Если значение \fIsigspec\fP равно .SM \fBERR\fP, то \fIaction\fP выполняется всякий раз, когда конвейер (который может состоять из одной простой команды), списка или составной команды, возвращают ненулевой статус завершения при соблюдении следующих условий. Ошибка .SM \fBERR\fP не выполняется, если неудачная команда является частью списка команд, следующего непосредственно за зарезервированным словом \fBwhile\fP или \fBuntil\fP, частью теста в \fIif\fP, частью команды, выполняемой в списке \fB&&\fP или \fB||\fP или списком, за исключением команды, следующей за последней \fB&&\fP или \fB||\fP, любой команды в конвейере, кроме последней (в зависимости от состояния опции оболочки \fBpipefail\fP) или если возвращаемое значение команды выполняется с использованием инверсии \fB!\fP. Это те же условия, которые соответствует опции \fBerrexit\fP (\fB\-e\fP). .IP Когда оболочка не интерактивна, то сигналы, игнорируемые при входе в оболочку, не могут быть перехвачены или сброшены. Интерактивные оболочки позволяют перехватывать сигналы, игнорируемые при входе. Перехваченные сигналы, которые не игнорируются, восстанавливаются до их первоначальных значений в подоболочке или среде подоболочек, когда она создается. Возвращаемый статус равен false, если какой\-либо сигнал \fIsigspec\fP является недопустимым; в противном случае \fBtrap\fP возвращает true. .TP \fBtrue\fP Ничего не делает, возвращает статус 0. .TP \fBtype\fP [\fB\-aftpP\fP] \fIname\fP [\fIname\fP .\|.\|.] Указывает как будет интерпретироваться каждое \fIname\fP, если оно будет использоваться в качестве названия команды. .IP Если используется опция \fB\-t\fP, то команда \fBtype\fP выводит строку, которая является одной из \fIalias\fP, \fIkeyword\fP, \fIfunction\fP, \fIbuiltin\fP или \fIfile\fP, если \fIname\fP является псевдонимом, зарезервированным в оболочке словом, функцией, встроенным или исполняемым файлом, соответственно. Если \fIname\fP не найдено, то команда \fBtype\fP ничего не выводит и возвращает ненулевой статус завершения. .IP Если используется опция \fB\-p\fP, \fBtype\fP либо возвращает путь к исполняемому файлу, который можно было бы найти, выполнив поиск в \fB$PATH\fP для \fIname\fP, либо ничего, если .Q "type \-t name" не возвращает \fIfile\fP. Опция \fB\-P\fP заставляет выполнять поиск в .SM \fBPATH\fP для каждого \fIname\fP, даже если .Q "type \-t name" не будет возвращать \fIfile\fP. Если \fIname\fP присутствует в таблице хэшированных команд, то \fB\-p\fP и \fB\-P\fP выводят хэшированное значение, которое не обязательно является файлом, который появляется первым в .SM \fBPATH\fP. .IP Если используется опция \fB\-a\fP, то команда \fBtype\fP выводит все места, содержащие команду с названием \fIname\fP. Сюда входят псевдонимы, зарезервированные слова, функции и встроенные команды, но можно указать опции поиска по пути (\fB\-p\fP и \fB\-P\fP), чтобы ограничить вывод исполняемыми файлами. \fBtype\fP не обращается к таблице хэшированных команд при использовании \fB\-a\fP с \fB\-p\fP, а выполняет только поиск в .SM \fBPATH\fP для \fIname\fP. .IP Опция \fB\-f\fP подавляет поиск функции оболочки, как и в случае со встроенной командой \fBcommand\fP. Команда \fBtype\fP возвращает значение true, если найдены все аргументы и значение false, если ни один из аргументов не найден. .TP \fBulimit\fP [\fB\-HS\fP] \fB\-a\fP .PD 0 .TP \fBulimit\fP [\fB\-HS\fP] [\fB\-bcdefiklmnpqrstuvxPRT\fP [\fIlimit\fP]] .PD Обеспечивает контроль над ресурсами, доступными оболочке и запускаемым ею процессам, в системах, которые допускают такой контроль. .IP Опции \fB\-H\fP и \fB\-S\fP определяют, будет ли для данного ресурса установлен жесткий или мягкий лимит. Пользователь, не имеющий прав администратора root, не может увеличить жесткий лимит после его установки; мягкий лимит может быть увеличен до значения жесткого лимита. Если не указаны ни \fB\-H\fP, ни \fB\-S\fP, то \fBulimit\fP устанавливает как мягкие, так и жесткие лимиты. .IP Значением \fIlimit\fP может быть число в единицах измерения, указанных для ресурса или одно из специальных значений \fBhard\fP, \fBsoft\fP или \fBunlimited\fP, которые обозначают текущий жесткий лимит, текущий мягкий лимит и отсутствие лимитов, соответственно. Если значение \fIlimit\fP опущено, то \fBulimit\fP выводит текущее значение мягкого лимита ресурса, если только не задана опция \fB\-H\fP. Если указано более одного ресурса, то перед значением выводятся название лимита и единица измерения, если это необходимо. Другие варианты интерпретируются следующим образом: .RS .PD 0 .TP \fB\-a\fP Сообщать обо всех текущих лимитах; никакие лимиты не установлены. .TP \fB\-b\fP Максимальный размер буфера сокета. .TP \fB\-c\fP Максимальный размер создаваемых основных файлов. .TP \fB\-d\fP Максимальный размер сегмента данных процесса. .TP \fB\-e\fP Максимальный приоритет планирования ( .Q nice ). .TP \fB\-f\fP Максимальный размер файлов, записываемых оболочкой и ее дочерними элементами. .TP \fB\-i\fP Максимальное количество ожидающих сигналов. .TP \fB\-k\fP Максимальное количество k\-очередей, которое может быть выделено. .TP \fB\-l\fP Максимальный размер, который может быть сохранен в памяти. .TP \fB\-m\fP Максимальный размер резидентного набора (многие системы не соблюдают этот лимит). .TP \fB\-n\fP Максимальное количество открытых файловых дескрипторов (большинство систем не позволяют устанавливать это значение). .TP \fB\-p\fP Размер канала в 512\-байтовых блоках (это может быть не задано). .TP \fB\-q\fP Максимальное количество байт в очередях сообщений .SM POSIX . .TP \fB\-r\fP Максимальный приоритет планирования в режиме реального времени. .TP \fB\-s\fP Максимальный размер стека. .TP \fB\-t\fP Максимальное количество процессорного времени в секундах. .TP \fB\-u\fP Максимальное количество процессов, доступных одному пользователю. .TP \fB\-v\fP Максимальный объем виртуальной памяти, доступный оболочке и, в некоторых системах, ее дочерним элементам. .TP \fB\-x\fP Максимальное количество блокировок файлов. .TP \fB\-P\fP Максимальное количество псевдотерминалов. .TP \fB\-R\fP Максимальное время, в течение которого процесс реального времени может выполняться до блокировки, в микросекундах. .TP \fB\-T\fP Максимальное количество потоков. .PD .PP Если указан \fIlimit\fP, а опция \fB\-a\fP не используется, то новым значением указанного ресурса будет \fIlimit\fP. Если опция не указана, то предполагается значение \fB\-f\fP. .PP Значения указаны с шагом в 1024 байта, за исключением \fB\-t\fP, которое измеряется в секундах; \fB\-R\fP, которое измеряется в микросекундах; \fB\-p\fP, которое измеряется в блоках по 512 байт; \fB\-P\fP, \fB\-T\fP, \fB\-b\fP, \fB\-k\fP, \fB\-n\fP и \fB\-u\fP, которые являются немасштабированными значениями; а в режиме posix, также \fB\-c\fP и \fB\-f\fP, которые имеют шаг в 512 байт. Возвращаемый статус равен 0, если только не указана недопустимая опция или аргумент или не произошла ошибка при установке нового лимита. .RE .TP \fBumask\fP [\fB\-p\fP] [\fB\-S\fP] [\fImode\fP] Установить для маски создания пользовательского файла значение режима \fImode\fP. Если \fImode\fP начинается с цифры, то это интерпретируется как восьмеричное число; в противном случае это интерпретируется как символьная маска режима, аналогичная той, которая принята в \fIchmod\fP(1). Если опция \fImode\fP опущена, то \fBumask\fP выводит текущее значение маски. Опция \fB\-S\fP без аргумента \fImode\fP выводит маску в символьном формате; по умолчанию выводится восьмеричное число. Если указана опция \fB\-p\fP, а опция \fImode\fP опущена, то выходные данные будут представлены в формате, который может быть повторно использован в качестве входных данных. Возвращаемый статус равен нулю, если режим был успешно изменен или если аргумент \fImode\fP не был указан и отличен от нуля в противном случае. .TP \fBunalias\fP [\-\fBa\fP] [\fIname\fP .\|.\|.] Удалить все названия \fIname\fP из списка определенных псевдонимов. Если указано значение \fB\-a\fP, то удалить все определения псевдонимов. Возвращаемое значение равно true, за исключением того случая, когда указанное \fIname\fP не является определением псевдонима. .TP \fBunset\fP [\-\fBfv\fP] [\-\fBn\fP] [\fIname\fP .\|.\|.] Для каждого названия \fIname\fP удалить соответствующую переменную или функцию. Если задана опция \fB\-v\fP, то каждое \fIname\fP ссылается на переменную оболочки и эта переменная удаляется. Если указано значение \fB\-f\fP, то каждое значение \fIname\fP ссылается на функцию оболочки и определение функции удаляется. Если указана опция \fB\-n\fP, а \fIname\fP является переменной с атрибутом \fInameref\fP, то значение \fIname\fP будет отменено, но не значение переменной, на которую оно ссылается. Опция \fB\-n\fP не действует, если указана опция \fB\-f\fP. Переменные и функции, доступные только для чтения, не могут быть отключены. Когда переменные или функции удаляются, то они также удаляются из среды, передаваемой последующим командам. Если опции не указаны, то каждое \fIname\fP ссылается на переменную; если переменной с таким наименованием нет, то функция с таким наименованием, если таковая имеется, не задана. Некоторые переменные оболочки могут быть не заданы. Если какая\-либо переменная из .SM \fBBASH_ALIASES\fP, .SM \fBBASH_ARGV0\fP, .SM \fBBASH_CMDS\fP, .SM \fBBASH_COMMAND\fP, .SM \fBBASH_SUBSHELL\fP, .SM \fBBASHPID\fP, .SM \fBCOMP_WORDBREAKS\fP, .SM \fBDIRSTACK\fP, .SM \fBEPOCHREALTIME\fP, .SM \fBEPOCHSECONDS\fP, .SM \fBFUNCNAME\fP, .SM \fBGROUPS\fP, .SM \fBHISTCMD\fP, .SM \fBLINENO\fP, .SM \fBRANDOM\fP, .SM .SM \fBSECONDS\fP или .SM \fBSRANDOM\fP не заданы, то они теряют свои особые свойства, даже если впоследствии они будут сброшены. Статус выхода равен true, за исключением того случая, когда указанное \fIname\fP не доступно только для чтения или не может быть сброшено. .TP \fBwait\fP [\fB\-fn\fP] [\fB\-p\fP \fIvarname\fP] [\fIid\fP .\|.\|.] Ожидать завершения каждого указанного дочернего процесса \fIid\fP и вернуть статус завершения последнего идентификатора \fIid\fP. Каждый \fIid\fP может быть идентификатором процесса \fIpid\fP или спецификацией задания \fIjobspec\fP; если указана спецификация задания, то \fBwait\fP ожидает завершения всех процессов в задании. .IP Если опции или идентификаторы \fIid\fP не указаны, то команда \fBwait\fP ожидает выполнения всех запущенных фоновых заданий и замены последнего выполненного процесса, если его идентификатор процесса совпадает с \fB$!\fP, а статус возврата равен нулю. .IP Если задана опция \fB\-n\fP, то \fBwait\fP ожидает завершения любого из заданных идентификаторов \fIid\fP или, если \fIid\fP не заданы, то любой отмены задания или процесса и возвращает статус завершения. Если ни один из предоставленных идентификаторов \fIid\fP не является дочерним для оболочки или если \fIid\fP не указаны и в оболочке нет не ожидаемых дочерних элементов, то статус выхода равен 127. .IP Если указана опция \fB\-p\fP, то \fBwait\fP присваивает идентификатор процесса или задания, для которого возвращается статус завершения, переменной \fIvarname\fP, указанной в аргументе опции. Переменная, которая не может быть доступна только для чтения, будет отключена изначально, перед любым назначением. Это полезно только при использовании с опцией \fB\-n\fP. .IP Установка опции \fB\-f\fP, когда включено управление заданиями, заставляет \fBwait\fP ожидать завершения каждого \fIid\fP, прежде чем возвращать его статус, вместо возврата при изменении статуса. .IP Если ни один из идентификаторов \fIid\fP не указывает ни на один из активных дочерних процессов оболочки, то возвращаемый статус равен 127. Если \fBwait\fP прерывается сигналом, то любое \fIvarname\fP останется неустановленным, а статус возврата будет больше 128, как описано в разделе \fBСИГНАЛЫ\fP .ie \n(zZ=1 in \fIbash\fP(1). .el above. В противном случае возвращаемым статусом будет статус выхода последнего \fIid\fP. .SH "РЕЖИМ СОВМЕСТИМОСТИ ОБОЛОЧКИ" В Bash\-4.0 введена концепция "уровня совместимости с оболочкой" \fIshell compatibility level\fP, заданная как набор опций для встроенной команды shopt (\fBcompat31\fP, \fBcompat32\fP, \fBcompat40\fP, \fBcompat41\fP и так далее). Существует только единственный текущий уровень совместимости, каждый из которых является взаимоисключающим. Уровень совместимости предназначен для того, чтобы позволить пользователям выбирать поведение из предыдущих версий, несовместимое с новыми версиями, при переносе сценариев для использования текущих функций и поведения. Это временное решение. .PP В этом разделе не упоминается поведение, которое является стандартным для конкретной версии (например, установка \fBcompat32\fP означает, что в кавычки в правой части оператора сопоставления регулярных выражений, заключаются специальные символы регулярных выражений в слове, что является поведением по умолчанию в bash\-3.2 и последующих версиях). .PP Если пользователь активирует, скажем, уровень \fBcompat32\fP, это может повлиять на поведение других уровней совместимости вплоть до текущего уровня совместимости, включительно. Идея заключается в том, чтобы каждый уровень совместимости управлял поведением, которое изменилось в данной версии \fBbash\fP, но это поведение могло присутствовать и в более ранних версиях. Например, изменение на использование сравнений на основе локалей с помощью команды \fB[[\fP появилось в bash\-4.1, а в более ранних версиях использовались сравнения на основе ASCII, поэтому включение \fBcompat32\fP также позволит проводить сравнения на основе ASCII. Такой степени детализации может быть недостаточно для всех применений и в результате пользователям следует внимательно относиться к уровням совместимости. Ознакомьтесь с документацией по конкретной функциональной возможности, чтобы узнать о текущем поведении оболочки. .PP В Bash\-4.3 появилась новая переменная оболочки: .SM \fBBASH_COMPAT\fP. Значение, присвоенное этой переменной (десятичный номер версии, например, 4.2, или целое число, соответствующее опции \fBcompat\fP\fINN\fP, например, 42), определяет уровень совместимости. .PP Начиная с версии bash\-4.4, оболочка \fBbash\fP начала использовать устаревшие уровни совместимости. В конечном итоге эти опции будут удалены в пользу .SM \fBBASH_COMPAT\fP. .PP Bash\-5.0 была последней версией, в которой для предыдущей версии была предусмотрена отдельная опция shopt. .SM \fBBASH_COMPAT\fP \- это единственный механизм управления уровнем совместимости в версиях, более новых, чем bash\-5.0. .PP В следующей таблице описаны изменения в поведении, которые зависят от каждого уровня совместимости. Тег \fBcompat\fP\fINN\fP используется в качестве обозначения для установки уровня совместимости равным \fINN\fP с помощью одного из следующих механизмов. Для версий, предшествующих bash\-5.0, уровень совместимости может быть установлен с помощью соответствующей опции \fBcompat\fP\fINN\fP команды shopt. Для bash\-4.3 и более поздних версий предпочтительна переменная .SM \fBBASH_COMPAT\fP и она обязательна для версии bash\-5.1 и более поздних версий. .TP \fBcompat31\fP .PD 0 .RS .IP \(bu Кавычки rhs оператора сопоставления регулярных выражений команды \fB[[\fP (=\*~) не имеет особого эффекта. .RE .PD .TP \fBcompat32\fP .PD 0 .RS .IP \(bu Операторы \fB<\fP и \fB>\fP для команды \fB[[\fP не учитывают текущую локаль при сравнении строк; они используют порядок в формате ASCII. .RE .PD .TP \fBcompat40\fP .PD 0 .RS .IP \(bu Операторы \fB<\fP и \fB>\fP для команды \fB[[\fP не учитывают текущую локаль при сравнении строк; они используют порядок в формате ASCII. В версиях \fBBash\fP, предшествующих bash\-4.1, используется сортировка на основе ASCII и \fIstrcmp\fP(3). В bash\-4.1 и более поздних версиях используется последовательность сортировки на основе текущей локали и \fIstrcoll\fP(3). .RE .PD .TP \fBcompat41\fP .PD 0 .RS .IP \(bu В режиме posix за командой \fBtime\fP могут следовать опции, но они все равно будет распознаваться как зарезервированные слова (это интерпретация .SM POSIX 267). .IP \(bu В режиме \fIposix\fP синтаксический анализатор требует, чтобы слово \fIword\fP в части расширения параметра, заключенного в двойные кавычки, было четным количеством одинарных кавычек и они обрабатываются синтаксическим анализатором особым образом: символы внутри одинарных кавычек считаются заключенными в кавычки (это интерпретация .SM POSIX 221). .RE .PD .TP \fBcompat42\fP .PD 0 .RS .IP \(bu Строка замены при замене шаблона с двойными кавычками не подвергается удалению кавычек, как это происходит в версиях после bash\-4.2. .IP \(bu В режиме posix одинарные кавычки считаются специальными при расширении части слова \fIword\fP параметра, заключенного в двойные кавычки и могут использоваться для заключения в кавычки закрывающей фигурной скобки или другого специального символа (это часть .SM POSIX интерпретация 221). В более поздних версиях одинарные кавычки не являются чем\-то особенным в расширениях слов, заключенных в двойные кавычки. .RE .PD .TP \fBcompat43\fP .PD 0 .RS .IP \(bu Ошибки расширения слова считаются неустранимыми ошибками, которые приводят к ошибке текущей команды даже в режиме posix (по умолчанию они являются неустранимыми ошибками, которые приводят к завершению работы оболочки). .IP \(bu При выполнении функции оболочки состояние цикла (while/until/и т.д.) не сбрасывается, поэтому \fBbreak\fP или \fBcontinue\fP в этой функции будут прерывать или продолжать циклы в контексте вызова. Bash\-4.4 и более поздние версии, чтобы это предотвратить, сбрасывают состояние цикла. .RE .PD .TP \fBcompat44\fP .PD 0 .RS .IP \(bu Оболочка устанавливает значения, используемые переменными .SM \fBBASH_ARGV\fP и .SM \fBBASH_ARGC\fP, чтобы они могли расширяться до позиционных параметров оболочки, даже если расширенный режим отладки не включен. .IP \(bu Подоболочка наследует циклы от своего родительского контекста, поэтому \fBbreak\fP или \fBcontinue\fP приведут к завершению работы подоболочки. В Bash\-5.0 и более поздних версиях состояние цикла сбрасывается, чтобы предотвратить выход .IP \(bu Присвоения переменных, предшествующие встроенным функциям, таким как \fBexport\fP и \fBreadonly\fP, которые устанавливают атрибуты, продолжают влиять на переменные с тем же именованием в вызывающей среде, даже если оболочка не находится в режиме posix. .RE .PD .TP \fBcompat50\fP .PD 0 .RS .IP \(bu Bash\-5.1 изменила способ генерации .SM \fB$RANDOM\fP, чтобы привнести несколько больше случайности. Если уровень совместимости оболочки установлен на 50 или ниже, то она возвращается к методу из bash\-5.0 и предыдущих версий, поэтому при запуске генератора случайных чисел путем присвоения значения .SM \fBRANDOM\fP будет получена та же последовательность, что и в bash\-5.0. .IP \(bu Если хэш\-таблица команд пуста, то версии bash, предшествующие версии bash\-5.1, выводили соответствующее информационное сообщение, даже при выводе выходных данных, которые могут быть повторно использованы в качестве входных данных. Bash\-5.1 подавляет это сообщение, когда указана опция \fB\-l\fP. .RE .PD .TP \fBcompat51\fP .PD 0 .RS .IP \(bu Встроенная команда \fBunset\fP обрабатывает попытки отмены индексов массива \fB@\fP и \fB*\fP по\-разному в зависимости от того, является ли массив индексированным или ассоциативным и этим отличается от предыдущих версий. .IP \(bu Арифметические команды ( \fB((\fP.\|.\|.\&\fB))\fP ) и арифметические выражения могут быть расширены более одного раза. .IP \(bu Выражения, используемые в качестве аргументов для арифметических операторов в условной команде \fB[[\fP, могут быть расширены более одного раза. .IP \(bu Выражения в параметре подстроки, заключенные в скобки, могут быть расширены более одного раза. .IP \(bu Выражения в расширении слова \fB$((\fP.\|.\|.\&\fB))\fP могут быть расширены более одного раза. .IP \(bu Арифметические выражения, используемые в качестве индексированных нижних индексов массива, могут быть расширены более одного раза. .IP \(bu Команд \fBtest \-v\fP, при задании аргумента \fBA[@]\fP, где \fBA\fP \- существующий ассоциативный массив, возвращает значение true, если в массиве существуют какие\-либо заданные элементы. Bash\-5.2 будет искать ключ с именованием \fB@\fP и сообщать о нем в отчете. .IP \(bu Расширение слова ${\fIparameter\fP\fB[:]=\fP\fIvalue\fP} вернет значение \fIvalue\fP до того, как будут выполнены какие\-либо преобразования, относящиеся к конкретной переменной (например, преобразование в нижний регистр). Bash\-5.2 вернет окончательное значение, присвоенное переменной. .IP \(bu Синтаксический анализ подстановок команд будет работать так, как если бы была включена расширенная глобализация (смотрите описание встроенной команды \fBshopt\fP выше), так что синтаксический анализ подстановки команд, содержащей шаблон внешнего слоя (например, как части функции оболочки), не приведет к ощибке. Предполагаемая цель заключается в том, чтобы включить внешний слой (extglob) перед выполнением команды и расширением слова. Во время расширения слова произойдет ошибка, если внешний слой не был включен к моменту выполнения команды. .RE .PD .TP \fBcompat52\fP .PD 0 .RS .IP \(bu Встроенная команда \fBtest\fP использует свой исторический алгоритм для анализа подвыражений, заключенных в круглые скобки, при задании пяти или более аргументов. .IP \(bu Если опции \fB\-p\fP или \fB\-P\fP указаны во встроенной команде \fBbind\fP, то \fBbind\fP обрабатывает все аргументы, оставшиеся после обработки опции, как именования команд, которые можно привязать и отображает любые последовательности клавиш, привязанные к этим командам, вместо того, чтобы обрабатывать аргументы как последовательности клавиш для привязки. .RE .PD .if \n(zZ=1 .ig zZ .\" bash_builtins .SH "ОГРАНИЧЕННАЯ ОБОЛОЧКА" .\" rbash.1 .zY .PP Если \fBbash\fP запускается с названием \fBrbash\fP или при вызове указывается опция \fB\-r\fP, то оболочка становится ограниченной \fIrestricted\fP. Оболочка с ограниченным доступом используется для настройки окружающей среды, более контролируемой, чем в стандартной оболочке. Она ведет себя аналогично \fBbash\fP, за исключением того, что следующие действия запрещены или не выполняются: .IP \(bu Изменение каталогов с помощью \fBcd\fP. .IP \(bu Задание или отмена значений .SM \fBSHELL\fP, .SM \fBPATH\fP, .SM \fBHISTFILE\fP, .SM \fBENV\fP или .SM \fBBASH_ENV\fP. .IP \(bu Указание названий команд, содержащих \fB/\fP. .IP \(bu Указание названия файла, содержащего \fB/\fP в качестве аргумента встроенной команды \fB.\fP. .IP \(bu Использование опции \fB\-p\fP для встроенной команды \fB.\fP, чтобы указать путь поиска. .IP \(bu Указание названия файла, содержащего косую черту, в качестве аргумента встроенной команды \fBhistory\fP. .IP \(bu Указание названия файла, содержащего косую черту, в качестве аргумента опции \fB\-p\fP для встроенной команды \fBhash\fP. .IP \(bu Импорт определений функций из окружающей среды оболочки при запуске. .IP \(bu Анализ значений .SM \fBBASHOPTS\fP и .SM \fBSHELLOPTS\fP из окружающей среды оболочки при запуске. .IP \(bu Перенаправление вывода с использованием операторов перенаправления >, >|, <>, >&, &> и >>. .IP \(bu Использование встроенной команды оболочки \fBexec\fP для замены другой командой. .IP \(bu Добавление или удаление встроенных команд с опциями \fB\-f\fP и \fB\-d\fP для встроенной команды \fBenable\fP. .IP \(bu Использование встроенной команды \fBenable\fP для включения или отключения встроенных команд оболочки. .IP \(bu Указание опции \fB\-p\fP для встроенной команды \fBcommand\fP. .IP \(bu Отключение ограниченного режима с помощью команды \fBset +r\fP или \fBshopt \-u restricted_shell\fP. .PP Эти ограничения вступают в силу после чтения любых файлов запуска. .PP .ie \n(zY=1 When a command that is found to be a shell script is executed, .el \{ When a command that is found to be a shell script is executed (see .SM .B "COMMAND EXECUTION" above), .\} \fBrbash\fP отключает все ограничения в оболочке, созданной для выполнения скрипта. .if \n(zY=1 .ig zY .\" end of rbash.1 .SH "СМОТРИТЕ ТАКЖЕ" .PD 0 .TP \fIРуководство по Bash\fP, Брайан Фокс (Brian Fox) и Чет Рейми (Chet Ramey) .TP \fIБиблиотека Readline Gnu\fP, Брайан Фокс (Brian Fox) и Чет Рейми (Chet Ramey) .TP \fIБиблиотека истории Gnu\fP, Брайан Фокс (Brian Fox) и Чет Рейми (Chet Ramey) .TP Интерфейс переносимой операционной системы (POSIX), часть 2: оболочка и утилиты, IEEE \(em http://pubs.opengroup.org/onlinepubs/9799919799/ .TP http://tiswww.case.edu/\*~chet/bash/POSIX \(em a description of posix mode .TP \fIsh\fP(1), \fIksh\fP(1), \fIcsh\fP(1) .TP \fIemacs\fP(1), \fIvi\fP(1) .TP \fIreadline\fP(3) .PD .SH ФАЙЛЫ .PD 0 .TP .FN /bin/bash Исполняемый файл \fBbash\fP .TP .FN /etc/profile Общесистемный файл инициализации, выполняемый для входа в оболочку .TP .FN \*~/.bash_profile Файл персональной инициализации, выполняемый для входа в оболочку .TP .FN \*~/.bashrc Отдельный файл запуска для каждой интерактивной оболочки .TP .FN \*~/.bash_logout Отдельный файл очистки оболочки, выполняемый при выходе из оболочки .TP .FN \*~/.bash_history Значение по умолчанию для \fBHISTFILE\fP, файла, в котором bash сохраняет историю команд .TP .FN \*~/.inputrc Отдельный файл инициализации \fIreadline\fP .PD .SH АВТОРЫ Брайан Фокс (Brian Fox). Фонд свободного программного обеспечения .br bfox@gnu.org .PP Чет Рейми (Chet Ramey). Университет Case Western Reserve .br chet.ramey@case.edu .SH "СООБЩЕНИЯ ОБ ОШИБКАХ" Если вы обнаружите ошибку в \fBbash\fP, то просим сообщить нам об этом. Но сначала просим вас убедиться, что это действительно ошибка и что она присутствует в последней версии \fBbash\fP. Последняя версия всегда доступна на сайтах \fIftp://ftp.gnu.org/pub/gnu/bash/\fP и \fIhttp://git.savannah.gnu.org/cgit/bash.git/snapshot/bash\-master.tar.gz\fP. .PP Как только вы определите, что ошибка действительно существует, то используйте команду \fIbashbug\fP, чтобы отправить отчет об ошибке. Если у вас есть исправление, то просим вас также отправить его по электронной почте! Вы можете присылать предложения и .Q philosophical сообщения об ошибках в \fIbug\-bash@gnu.org\fP или опубликовывать их в группе новостей Usenet \fBgnu.bash.bug\fP. .PP ВСЕ сообщения об ошибках должны содержать: .PP .PD 0 .TP 20 Номер версии \fBbash\fP .TP Аппаратурные средства и операционную систему .TP Компилятор, используемый для компиляции .TP Описание поведения ошибки .TP Скрипт short или .Q recipe существующее исправление ошибки .PD .PP \fIbashbug\fP автоматически вставляет первые три элемента в шаблон, который она предоставляет для отправки отчета об ошибке. .PP Комментарии и сообщения об ошибках, касающиеся этой страницы руководства, следует направлять \fIchet.ramey@case.edu\fP. .SH ОШИБКИ Она слишком большая и слишком медленная. .PP Существуют некоторые небольшие различия между \fBbash\fP и традиционными версиями \fBsh\fP, в основном, это \- из\-за спецификации .SM POSIX . .PP В некоторых случаях использование псевдонимов приводит к путанице. .PP Встроенные в оболочку команды и функции не подлежат останову или перезапуску. .PP Составные команды и списки команд вида .Q "a ; b ; c" не обрабатываются корректно в сочетании с приостановкой процесса. Когда процесс останавливается, оболочка немедленно выполняет следующую команду в списке или прерывает все существующие циклы. Достаточно заключить команду в круглые скобки и поместить ее в подоболочку, которая может быть остановлена как единое целое или запустить команду в фоновом режиме и немедленно вывести ее на передний план. .PP Переменные массива могут быть (пока) не экспортированы. .zZ .zY .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) Aleksandr Felda . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .