aboutsummaryrefslogtreecommitdiff
path: root/ru_RU.KOI8-R/man/man1/sh.1
diff options
context:
space:
mode:
Diffstat (limited to 'ru_RU.KOI8-R/man/man1/sh.1')
-rw-r--r--ru_RU.KOI8-R/man/man1/sh.12253
1 files changed, 2253 insertions, 0 deletions
diff --git a/ru_RU.KOI8-R/man/man1/sh.1 b/ru_RU.KOI8-R/man/man1/sh.1
new file mode 100644
index 0000000000..15956b91fc
--- /dev/null
+++ b/ru_RU.KOI8-R/man/man1/sh.1
@@ -0,0 +1,2253 @@
+.\"-
+.\" Copyright (c) 1991, 1993
+.\" The Regents of the University of California. All rights reserved.
+.\"
+.\" This code is derived from software contributed to Berkeley by
+.\" Kenneth Almquist.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 4. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95
+.\" %FreeBSD: src/bin/sh/sh.1,v 1.126 2007/12/05 12:29:26 ru Exp %
+.\" $FreeBSDru: frdp/doc/ru_RU.KOI8-R/man/man1/sh.1,v 1.1 2007/12/05 12:33:29 ru Exp $
+.\" $FreeBSD$
+.\"
+.Dd 7 октября 2006
+.Dt SH 1
+.Os
+.Sh НАЗВАНИЕ
+.Nm sh
+.Nd командный интерпретатор (оболочка)
+.Sh СИНТАКСИС
+.Nm
+.Op Fl /+abCEefIimnPpsTuVvx
+.Op Fl /+o Ar длинное_имя
+.Op Fl c Ar строка
+.Op Ar аргумент ...
+.Sh ОПИСАНИЕ
+Утилита
+.Nm
+является стандартным командным интерпретатором в системе.
+Текущая версия
+.Nm
+подвергается изменениям, чтобы соответствовать спецификации
+.St -p1003.2
+для командных оболочек.
+Эта версия включает в себя много возможностей, делающих
+её схожей в некоторых отношениях с оболочкой Korn.
+Однако это не клон командной оболочки Korn,
+каковым является
+.Nm pdksh .
+В эту версию включены только возможности, определённые стандартом
+.Tn POSIX ,
+плюс несколько расширений Berkeley.
+Эта страница справочника не предназначена быть ни учебником,
+ни полной спецификацией командной оболочки.
+.Ss Обзор
+Оболочка \[em] это команда, которая читает строки из файла или с терминала,
+интерпретирует их и, в общем случае, выполняет другие команды.
+Это программа, которая запускается, когда пользователь входит в систему,
+хотя пользователь может выбрать другую оболочку с помощью команды
+.Xr chsh 1 .
+В оболочке реализован язык, имеющий конструкции для управления потоками,
+макросы, которые помимо функции накопления данных предоставляют множество
+других возможностей,
+имеется встроенная поддержка работы с историей команд и
+возможность редактирования командной строки.
+Она включает много возможностей, делающих удобной интерактивную
+работу, и в то же время обладает тем преимуществом, что её
+интерпретируемый язык \[em] общий для интерактивного и неинтерактивного
+использования (командных сценариев).
+Таким образом, команды можно вводить как непосредственно из запущенной
+командной оболочки, так и поместить их в файл, который может быть
+выполнен непосредственно оболочкой.
+.Ss Вызов
+.\"
+.\" XXX This next sentence is incredibly confusing.
+.\"
+Если не были указаны аргументы, и стандартный ввод
+подсоединён к терминалу (или если установлена опция
+.Fl i ) ,
+оболочка считается интерактивной.
+Интерактивная оболочка выводит строку-приглашение перед каждой командой
+и обрабатывает программные и командные ошибки по-другому (см.\& ниже).
+Сразу после запуска оболочка проверяет 0-й аргумент, и если он начинается
+с тире
+.Pq Ql - ,
+оболочка также считается оболочкой входа в систему (login shell).
+Обычно это делается автоматически, когда пользователь входит в систему.
+Оболочка входа вначале читает команды из файла
+.Pa /etc/profile ,
+а затем из файла
+.Pa .profile
+в домашнем каталоге пользователя,
+если они существуют.
+Если переменная окружения
+.Ev ENV
+установлена на момент запуска оболочки, либо установлена в файле
+.Pa .profile
+(если это оболочка входа), то оболочка затем читает команды из файла,
+указанного в
+.Ev ENV .
+Следовательно, пользователь должен помещать команды, которые должны
+выполняться только в момент входа в систему, в файл
+.Pa .profile ,
+а команды, которые должны выполняться при каждом запуске оболочки,
+в файл
+.Ev ENV .
+Пользователь может установить значение переменной
+.Ev ENV
+в имя какого-нибудь файла, поместив следующую строку в файл
+.Pa .profile
+в своём домашнем каталоге, заменив
+.Pa .shinit
+на желаемое имя файла:
+.Pp
+.Dl "ENV=$HOME/.shinit; export ENV"
+.Pp
+Первый указанный в командной строке аргумент, не являющейся опцией,
+будет воспринят как имя файла, из которого должны читаться команды
+(сценарий оболочки), а оставшиеся аргументы устанавливаются
+как позиционные параметры оболочки
+.Li ( $1 , $2 ,
+и т.д.).
+В противном случае оболочка читает команды
+со своего стандартного ввода.
+.Pp
+В отличие от более ранних версий
+.Nm ,
+сценарий из
+.Ev ENV
+считывается только интерактивной оболочкой.
+Это закрывает широко известную и иногда легко эксплуатируемую
+брешь в системе безопасности, связанную с плохо продуманными
+сценариями
+.Ev ENV .
+.Ss Обработка списка аргументов
+Все однобуквенные опции
+.Nm
+имеют соответствующие длинные имена, за исключением
+.Fl c
+.Fl /+o .
+Эти длинные имена указаны следом за однобуквенными опциями
+в описании ниже.
+Длинное имя опции может быть указано как аргумент к опции
+.Fl /+o
+.Nm .
+Когда оболочка уже запущена, длинное имя опции может быть указано
+как аргумент к опции
+.Fl /+o
+встроенной команды
+.Ic set ,
+описанной позже в разделе
+.Sx Встроенные команды .
+Тире
+.Pq Ql - ,
+указанное перед опцией, включает её, знак плюс
+.Pq Ql +
+\[em] выключает.
+Строка
+.Dq Li --
+или просто
+.Ql -
+прерывает обработку опций, и все оставшиеся слова считаются
+аргументами.
+Опции
+.Fl /+o
+.Fl c
+не имеют соответствующих длинных имён.
+Они требуют указания аргументов, и их описание следует за описанием
+однобуквенных опций.
+.Bl -tag -width indent
+.It Fl a Li allexport
+Переменные будут помечены для экспорта в момент,
+когда им присваиваются значения.
+.It Fl b Li notify
+Включить асинхронное уведомление о завершении фоновых заданий.
+(НЕ РЕАЛИЗОВАНО)
+.It Fl C Li noclobber
+Не перезаписывать существующие файлы при использовании
+.Ql > .
+.It Fl E Li emacs
+Включить встроенный редактор командной строки
+.Xr emacs 1
+(выключает опцию
+.Fl V ,
+если она была установлена).
+.It Fl e Li errexit
+Немедленно выйти, если одна из непроверенных команд в неинтерактивном
+режиме завершилась со сбоем.
+Статус завершения команды считается явно проверенным, если команда
+является частью управляющей структуры
+.Ic if , elif , while
+или
+.Ic until ,
+если команда является левосторонним операндом операторов
+.Dq Li &&
+или
+.Dq Li || ,
+или если команда является конвейером и ей предшествует оператор
+.Ic !\& .
+Если выполняется функция оболочки и её статус завершения проверяется
+явно, то все команды в функции также считаются проверенными.
+.It Fl f Li noglob
+Отключить раскрытие путей файлов.
+.It Fl I Li ignoreeof
+В интерактивном режиме, игнорировать символы
+.Dv EOF
+на входе.
+.It Fl i Li interactive
+Насильно установить интерактивный режим работы оболочки.
+.It Fl m Li monitor
+Включить управление заданиями (включается автоматически в
+интерактивном режиме).
+.It Fl n Li noexec
+В неинтерактивном режиме, читать команды, но не выполнять их.
+Это удобно для проверки синтаксиса командных сценариев.
+.It Fl P Li physical
+Изменить установку по умолчанию для команд
+.Ic cd
+.Ic pwd
+.Fl L
+(логическое расположение каталогов)
+на
+.Fl P
+(физическое расположение каталогов).
+.It Fl p Li privileged
+Включить привилегированный режим.
+Этот режим включается при старте,
+если эффективный идентификатор пользователя или группы
+не равен реальному идентификатору пользователя или группы.
+Выключение этого режима устанавливает эффективные идентификаторы
+пользователя и группы в реальные.
+Когда этот режим включен в интерактивной оболочке, то после файла
+.Pa /etc/profile
+вместо
+.Pa ~/.profile
+читается файл
+.Pa /etc/suid_profile ,
+и содержимое переменной
+.Ev ENV
+игнорируется.
+.It Fl s Li stdin
+Читать команды из стандартного ввода (устанавливается
+автоматически, если нет файловых аргументов).
+Эта опция не
+действует, если включается после того, как оболочка уже запущена
+(т.е.\& когда включается командой
+.Ic set ) .
+.It Fl T Li trapsasync
+Ожидая завершения дочернего процесса, выполнять ловушки немедленно.
+Если эта опция не установлена, ловушки выполняются после завершения
+дочернего процесса, как определено в
+.St -p1003.2 .
+Эта нестандартная опция полезна, чтобы окружать сторожевой оболочкой
+дочерние процессы, блокирующие сигналы.
+Окружающая оболочка может либо убить процесс потомка,
+либо просто вернуть управление терминалу и оставить процесс потомка
+работающим, например так:
+.Bd -literal -offset indent
+sh -T -c "trap 'exit 1' 2 ; некая-блокирующаяся-программа"
+.Ed
+.It Fl u Li nounset
+Записать сообщение в стандартный файл ошибок при попытке
+раскрыть неустановленную переменную и, если оболочка
+неинтерактивная, выйти немедленно.
+.It Fl V Li vi
+Включить встроенный редактор командной строки
+.Xr vi 1
+(выключает опцию
+.Fl E ,
+если она была установлена).
+.It Fl v Li verbose
+Оболочка пишет данные из своего стандартного ввода
+в стандартный файл ошибок, по мере их поступления.
+Удобно для отладки.
+.It Fl x Li xtrace
+Выводить каждую команду (предваряя её значением переменной
+.Va PS4 )
+в стандартный файл ошибок, перед тем как её выполнить.
+Удобно для отладки.
+.El
+.Pp
+Если задана опция
+.Fl c ,
+то вместо стандартного ввода оболочка читает команды из операнда
+.Ar строка
+этой опции.
+Следует помнить, что эта опция принимает только одну строку в
+качестве аргумента, поэтому строки, состоящие из нескольких слов,
+должны быть экранированы.
+.Pp
+Опция
+.Fl /+o
+в качестве единственного своего аргумента берёт длинное имя
+опции, которую необходимо включить или отключить.
+Например, следующие два вызова
+.Nm
+оба активируют встроенный редактор командной строки
+.Xr emacs 1 :
+.Bd -literal -offset indent
+set -E
+set -o emacs
+.Ed
+.Pp
+Опция
+.Fl o
+без аргументов показывает текущие установки опций в удобочитаемом формате.
+Опция
+.Cm +o
+без аргумента выводит текущие установки опций в формате, подходящем
+для их повторного ввода в оболочку.
+.Ss Лексическая структура
+Оболочка читает строки из файла ввода и разбивает их на слова.
+Разделителями слов служат пробельные символы (пробелы и табуляции) и
+определённые последовательности символов, называемые
+.Dq операторами ,
+которые имеют специальное значение для оболочки.
+Есть два типа операторов: управляющие операторы и
+операторы перенаправления (их назначение обсуждается позже).
+Вот список допустимых операторов:
+.Bl -tag -width indent
+.It Управляющие операторы:
+.Bl -column "XXX" "XXX" "XXX" "XXX" "XXX" -offset center -compact
+.It Li & Ta Li && Ta Li ( Ta Li ) Ta Li \en
+.It Li ;; Ta Li ; Ta Li | Ta Li ||
+.El
+.It Операторы перенаправления:
+.Bl -column "XXX" "XXX" "XXX" "XXX" "XXX" -offset center -compact
+.It Li < Ta Li > Ta Li << Ta Li >> Ta Li <>
+.It Li <& Ta Li >& Ta Li <<- Ta Li >|
+.El
+.El
+.Pp
+Символ
+.Ql #
+в начале слова обозначает начало комментария.
+Слово, начинающееся с
+.Ql # ,
+и остаток строки игнорируются.
+.Ss Экранирование
+Экранирование используется, чтобы аннулировать специальное для
+оболочки значение определённых символов или слов, таких как
+операторы, пробельные символы, ключевые слова или псевдонимы.
+.Pp
+Есть три типа экранирования: парные одинарные кавычки,
+парные двойные кавычки и обратная косая черта.
+.Bl -tag -width indent
+.It Одинарные кавычки
+Заключение символов в одинарные кавычки сохраняет буквальное
+значение всех этих символов (за исключением одинарных кавычек,
+что делает невозможным помещение одинарных кавычек внутрь строки,
+экранированной одинарными кавычками).
+.It Двойные кавычки
+Заключение символов в двойные кавычки сохраняет буквальное
+значение всех этих символов за исключением знака доллара
+.Pq Ql $ ,
+обратной кавычки
+.Pq Ql `
+и обратной косой черты
+.Pq Ql \e .
+Исторически так сложилось, что обратная косая черта внутри
+двойных кавычек ведёт себя странно.
+Её значение остаётся буквальным, за исключением случаев, когда
+она предваряет следующие символы, для экранирования которых
+она и предназначена:
+.Bl -column "XXX" "XXX" "XXX" "XXX" "XXX" -offset center -compact
+.It Li $ Ta Li ` Ta Li \&" Ta Li \e\ Ta Li \en
+.El
+.It Обратная косая черта
+Обратная косая черта сохраняет буквальное значение следующего
+за ней символа, за исключением символа новой строки
+.Pq Ql \en .
+Обратная косая черта перед символом новой строки расценивается
+как продолжение строки.
+.El
+.Ss Зарезервированные слова
+Зарезервированные слова \[em] это слова, имеющие специальное значение
+для оболочки.
+Они распознаются в начале строки и после управляющего оператора.
+Вот список зарезервированных слов:
+.Bl -column "doneXX" "elifXX" "elseXX" "untilXX" "whileX" -offset center
+.It Li \&! Ta { Ta } Ta Ic case Ta Ic do
+.It Ic done Ta Ic elif Ta Ic else Ta Ic esac Ta Ic fi
+.It Ic for Ta Ic if Ta Ic then Ta Ic until Ta Ic while
+.El
+.Ss Псевдонимы
+Псевдоним \[em] это имя и соответствующее значение, установленное
+встроенной командой
+.Ic alias .
+В тех местах, где может находиться зарезервированное слово (см.\& выше),
+и после проверки на зарезервированные слова, оболочка проверяет,
+соответствует ли слово какому-либо псевдониму.
+Если да, оболочка заменяет его во входном потоке на его значение.
+Например, если имеется псевдоним с названием
+.Dq Li lf
+и значением
+.Dq Li "ls -F" ,
+тогда входной поток
+.Pp
+.Dl "lf foobar"
+.Pp
+преобразуется в
+.Pp
+.Dl "ls -F foobar"
+.Pp
+Псевдонимы предоставляют удобное средство для безыскусных пользователей
+создавать стенографические сокращения для команд, не изучая, как
+создавать функции с аргументами.
+Они также могут быть
+использованы для создания лексически невразумительного кода.
+Использование псевдонимов для этих целей не рекомендуется.
+.Pp
+Действие псевдонима может быть отменено в командной строке,
+если использовать экранирование внутри или смежно с именем
+псевдонима.
+Чаще всего это делают, помещая перед
+псевдонимом обратную косую черту, чтобы могла выполниться
+функция, встроенная команда или обычная программа с таким же именем.
+См.\& раздел
+.Sx Экранирование .
+.Ss Команды
+Оболочка интерпретирует слова, которые читает, в соответствии с языком,
+спецификация которого лежит вне рамок этой страницы справочника
+(обратитесь к BNF в документе
+.St -p1003.2 ) .
+Основное то, что читается строка, и если первое слово в строке
+(или после оператора управления) не является зарезервированным,
+то оболочка распознала простую команду.
+В противном случае команда распознаётся как составная или как
+некоторая другая специальная конструкция.
+.Ss Простые команды
+Когда распознаётся простая команда, оболочка предпринимает
+следующие действия:
+.Bl -enum
+.It
+Слова в форме
+.Dq Li имя=значение
+удаляются из начала строки и назначаются в качестве окружения
+этой простой команды.
+Операторы перенаправления и их аргументы (как описано ниже)
+удаляются и сохраняются для дальнейшей обработки.
+.It
+Оставшиеся слова раскрываются, как описано в разделе
+.Sx Раскрытие слов .
+Первое оставшееся слово интерпретируется как имя команды,
+и осуществляется поиск этой команды.
+Оставшиеся слова
+становятся аргументами этой команды.
+Если не нашлось имени команды, переменные
+.Dq Li имя=значение
+из 1) назначаются текущей оболочке.
+.It
+Выполняются перенаправления, как описано в следующем разделе.
+.El
+.Ss Перенаправления
+Перенаправления используются для изменения направления, откуда команда
+читает свой ввод и куда шлёт свой вывод.
+В общем, перенаправления открывают, закрывают или
+дублируют существующую ссылку на файл.
+Общий формат
+перенаправления такой:
+.Pp
+.D1 Oo Ar n Oc Ar оператор-перенаправления файл
+.Pp
+где
+.Ar оператор-перенаправления
+\[em]
+это один из операторов перенаправления, упомянутых ранее.
+Далее следуют некоторые примеры использования этих операторов.
+Обратите внимание, что сокращения stdin и stdout широко
+используются в значении стандартного ввода и
+стандартного вывода, соответственно.
+.Bl -tag -width "1234567890XX" -offset indent
+.It Oo Ar n Oc Ns Li > Ar файл
+перенаправить stdout (или файловый дескриптор
+.Ar n )
+.Ar файл
+.It Oo Ar n Oc Ns Li >| Ar файл
+то же что выше, но отменяет опцию
+.Fl C
+.It Oo Ar n Oc Ns Li >> Ar файл
+добавить stdout (или файловый дескриптор
+.Ar n )
+в конец файла
+.It Oo Ar n Oc Ns Li < Ar файл
+перенаправить stdin (или файловый дескриптор
+.Ar n )
+из файла
+.It Oo Ar n Oc Ns Li <> Ar файл
+перенаправить stdin (или файловый дескриптор
+.Ar n )
+в и из файла
+.It Oo Ar n1 Oc Ns Li <& Ns Ar n2
+дублировать stdin (или файловый дескриптор
+.Ar n1 )
+из файлового дескриптора
+.Ar n2
+.It Oo Ar n Oc Ns Li <&-
+закрыть stdin (или файловый дескриптор
+.Ar n )
+.It Oo Ar n1 Oc Ns Li >& Ns Ar n2
+дублировать stdout (или файловый дескриптор
+.Ar n1 )
+в файловый дескриптор
+.Ar n2
+.It Oo Ar n Oc Ns Li >&-
+закрыть stdout (или файловый дескриптор
+.Ar n )
+.El
+.Pp
+Следующее перенаправление часто называют
+.Dq документ-здесь .
+.Bd -ragged -offset indent
+.Oo Ar n Oc Ns Li << Ar разделитель
+.D1 Ar текст-документа
+.D1 ...
+.Ar разделитель
+.Ed
+.Pp
+Весь текст в последующих строках до разделителя сохраняется и подаётся
+команде на стандартный ввод или на файловый дескриптор
+.Ar n ,
+если он указан.
+Если
+.Ar разделитель ,
+указанный в первой строке, экранирован, то
+.Ar текст-документа
+рассматривается буквально, в противном случае текст подвергается
+раскрытию параметров, подстановке команд и арифметическому
+раскрытию (как описано в разделе
+.Sx Раскрытие слов ) .
+Если использовать оператор
+.Dq Li <<-
+вместо
+.Dq Li << ,
+ведущие символы табуляции
+в строках
+.Ar текст-документа
+будут отрезаны.
+.Ss Поиск и выполнение
+Есть три типа команд: функции оболочки,
+встроенные команды и обычные программы.
+Команда ищется по имени, в этом порядке.
+Эти три типа команд выполняются по-разному.
+.Pp
+Когда выполняется функция оболочки, все позиционные параметры оболочки
+(исключая
+.Li $0 ,
+который остаётся неизменным)
+становятся аргументами функции оболочки.
+Переменные, которые в явном виде поместили в окружение
+команды (помещая их определения перед
+именем функции) делаются локальными для функции и
+устанавливаются в указанные значения.
+После этого выполняется команда, указанная в определении функции.
+Когда команда завершается,
+восстанавливаются оригинальные значения позиционных параметров.
+Всё это происходит внутри текущей оболочки.
+.Pp
+Встроенные команды оболочки выполняются внутри самой оболочки, без
+порождения нового процесса.
+.Pp
+В остальных случаях, если имя команды не соответствует ни функции,
+ни встроенной команде, команда ищется как обычная
+программа в файловой системе (как описано в следующем разделе).
+Когда выполняется обычная команда, оболочка запускает эту программу,
+передавая ей аргументы и окружение.
+Если программа не является обычным исполняемым файл
+(т.е.\& если она не начинается с
+.Dq "магического числа" ,
+чьё
+.Tn ASCII
+представление выглядит как
+.Dq Li #! ,
+в результате чего
+.Xr execve 2
+возвращает статус завершения
+.Er ENOEXEC ) ,
+оболочка интерпретирует программу в дочерней оболочке.
+В этом случае дочерняя оболочка проинициализирует себя,
+как если бы была
+запущена новая оболочка для обработки этого командного сценария,
+за исключением того, что новая оболочка будет помнить положение
+хэш-таблицы команд родительской оболочки
+(см.\& ниже описание встроенной команды
+.Ic hash ) .
+.Pp
+Обратите внимание, что предыдущие версии этого документа
+и самого исходного кода иногда вводили в заблуждение тем,
+что называли командный сценарий без магического числа
+.Dq "процедурой оболочки" .
+.Ss Поиск пути
+Выполняя поиск команды, оболочка сначала смотрит, нет ли
+функции оболочки с таким именем.
+Затем она ищет
+встроенную команду с таким именем.
+Если встроенная команда не найдена,
+происходит одна из двух вещей:
+.Bl -enum
+.It
+Команды, имена которых содержат символ косой черты, выполняются без
+какого-либо поиска.
+.It
+Оболочка ищет команду в каждом элементе переменной окружения
+.Ev PATH ,
+по очереди.
+Значением переменной
+.Ev PATH
+должен быть список элементов,
+разделённых двоеточиями.
+В каждом элементе указывается
+имя каталога.
+Текущий каталог
+может быть задан неявно, пустым именем каталога,
+или явно \[em] одной точкой.
+.El
+.Ss Статус завершения команды
+Каждая команда имеет статус завершения, который может повлиять на поведение
+других команд оболочки.
+Принцип таков, что команда возвращает
+нулевое значение в случае нормального или успешного завершения,
+и ненулевое \[em] в случае сбоя, ошибки, или чтобы вернуть значение
+.Dq ложь .
+Страница справочника для каждой команды
+должна предоставлять список кодов завершения, и что они означают.
+Кроме того, как встроенные команды, так и функции оболочки
+также возвращают код завершения.
+.Pp
+Если команда прерывается сигналом, её статус завершения равен 128 плюс
+номер сигнала.
+Номера сигналов определены в заголовочном файле
+.In sys/signal.h .
+.Ss Составные команды
+Составные команды \[em] это комбинации простых команд
+с управляющими операторами или зарезервированными словами, вместе составляющих
+одну большую составную команду.
+В общем, команда бывает одного из следующих типов:
+.Bl -item -offset indent
+.It
+простая команда
+.It
+конвейер
+.It
+список или составной-список
+.It
+составная команда
+.It
+определение функции
+.El
+.Pp
+Если не сказано иначе, статус завершения команды равен
+статусу завершения последней выполненной ею простой команды.
+.Ss Конвейеры
+Конвейер \[em] это последовательность одной или нескольких команд,
+разделённых оператором управления
+.Ql \&| .
+Стандартный вывод всех, кроме
+последней, команд подсоединяется к стандартному вводу
+следующей команды.
+Стандартный вывод последней
+команды наследуется из оболочки, как обычно.
+.Pp
+Формат конвейера такой:
+.Pp
+.D1 Oo Li \&! Oc Ar команда1 Op Li \&| Ar команда2 ...
+.Pp
+Стандартный вывод первой команды подсоединяется к стандартному
+вводу второй команды.
+Стандартный ввод, стандартный вывод, или
+они оба назначаются конвейером прежде,
+чем любым из перенаправлений, указанных операторами перенаправления,
+являющимися частью этой команды.
+.Pp
+Если конвейер выполняется не в фоновом режиме (это обсуждается дальше),
+оболочка ждёт завершения всех команд.
+.Pp
+Если зарезервированное слово
+.Ic !\&
+не предшествует конвейеру,
+статус завершения равен статусу завершения последней команды,
+указанной в конвейере.
+В противном случае статус завершения равен логическому
+отрицанию статуса завершения последней команды.
+То есть, если
+последняя команда возвращает ноль, статус завершения будет единицей; если
+последняя команда возвратит значение больше нуля, статус завершения
+будет ноль.
+.Pp
+Поскольку назначение конвейером стандартного ввода или стандартного
+вывода (или обоих) происходит до перенаправления, оно может быть
+изменено перенаправлением.
+Например:
+.Pp
+.Dl "команда1 2>&1 | команда2"
+.Pp
+шлёт и стандартный вывод, и стандартный файл ошибок команды
+.Ar команда1
+на стандартный вход команды
+.Ar команда2 .
+.Pp
+Символ
+.Ql \&;
+или символ новой строки обозначает, что предшествующий
+И-ИЛИ список (описанный ниже в разделе
+.Sx Закорачивающие операторы списка )
+будет выполняться последовательно;
+.Ql &
+означает асинхронное выполнение И-ИЛИ списка.
+.Pp
+Заметьте, что в отличие от некоторых других оболочек,
+.Nm
+выполняет каждый процесс в конвейере как дочерний процесс процесса
+.Nm .
+Встроенные команды \[em] исключение из этого правила.
+Они выполняются в текущей оболочке, хотя они не влияют на её окружение,
+когда используются в конвейерах.
+.Ss Фоновые команды (&)
+Если команда завершается управляющим оператором амперсанд
+.Pq Ql & ,
+оболочка выполняет эту команду асинхронно;
+оболочка не ждёт пока завершится эта команда, перед тем
+как выполнить следующую команду.
+.Pp
+Формат запуска команды в фоновом режиме такой:
+.Pp
+.D1 Ar команда1 Li & Op Ar команда2 Li & Ar ...
+.Pp
+Если оболочка неинтерактивная, стандартный ввод
+асинхронной команды устанавливается в
+.Pa /dev/null .
+.Ss Списки (в общем смысле)
+Список \[em] это последовательность из нуля или более команд, разделённых
+символами новой строки, точками с запятой или амперсандами,
+и необязательно завершающаяся одним из этих трёх символов.
+Команды в
+списке выполняются в той последовательности, в которой они написаны.
+Если за командой следует амперсанд, оболочка запускает
+эту команду и немедленно переходит к следующей команде;
+в противном случае она ждёт, когда команда завершится, перед тем
+как приступить к следующей.
+.Ss Закорачивающие операторы списка
+.Dq Li &&
+.Dq Li ||
+\[em] это И-ИЛИ операторы списка.
+.Dq Li &&
+выполняет первую команду и затем, в случае если статус завершения
+первой команды равен нулю, выполняет вторую.
+.Dq Li ||
+работает подобным же образом, но запускает вторую команду в случае
+ненулевого статуса завершения первой команды.
+.Dq Li &&
+.Dq Li ||
+имеют одинаковый приоритет.
+.Ss Конструкции управления потоком (if, while, for, case)
+Синтаксис команды
+.Ic if
+такой:
+.Bd -unfilled -offset indent -compact
+.Ic if Ar список
+.Ic then Ar список
+.Oo Ic elif Ar список
+.Ic then Ar список Oc Ar ...
+.Op Ic else Ar список
+.Ic fi
+.Ed
+.Pp
+Синтаксис команды
+.Ic while
+такой:
+.Bd -unfilled -offset indent -compact
+.Ic while Ar список
+.Ic do Ar список
+.Ic done
+.Ed
+.Pp
+Два списка выполняются в цикле пока статус завершения
+первого списка равен нулю.
+Команда
+.Ic until
+выглядит подобным образом, только на месте
+.Ic while
+содержит слово
+.Ic until ,
+и повторяется до тех пор, пока статус
+завершения первого списка не станет нулевым.
+.Pp
+Синтаксис команды
+.Ic for
+такой:
+.Bd -unfilled -offset indent -compact
+.Ic for Ar переменная Op Ic in Ar слово ...
+.Ic do Ar список
+.Ic done
+.Ed
+.Pp
+Если слово
+.Ic in
+и последующие слова опущены,
+вместо них используется
+.Ic in Li $@ .
+Слова раскрываются, а затем список выполняется
+по циклу, с переменной, принимающей в качестве значения каждое слово по очереди.
+Команды
+.Ic do
+.Ic done
+могут быть заменены на
+.Ql {
+.Ql } .
+.Pp
+Синтаксис команд
+.Ic break
+.Ic continue
+такой:
+.D1 Ic break Op Ar число
+.D1 Ic continue Op Ar число
+.Pp
+Команда
+.Ic break
+прерывает
+.Ar число
+самых внутренних циклов
+.Ic for
+или
+.Ic while .
+Команда
+.Ic continue
+продолжает работу со следующей итерации самого внутреннего цикла.
+Обе эти команды реализованы как встроенные.
+.Pp
+Синтаксис команды
+.Ic case
+такой:
+.Bd -unfilled -offset indent -compact
+.Ic case Ar слово Ic in
+.Ar шаблон Ns Li ) Ar список Li ;;
+.Ar ...
+.Ic esac
+.Ed
+.Pp
+Шаблон на самом деле может быть одним или несколькими шаблонами
+(см.\&
+.Sx Шаблоны оболочки ,
+описанные дальше),
+разделёнными символами
+.Ql \&| .
+Кодом завершения команды
+.Ic case
+является код завершения последней команды, выполненной в списке,
+или ноль, если не было подходящих шаблонов.
+.Ss Группировка команд
+Команды могут быть сгруппированы одним из двух способов:
+.Pp
+.D1 Li \&( Ns Ar список Ns Li \%)
+.Pp
+или
+.Pp
+.D1 Li { Ar список Ns Li \&; }
+.Pp
+Первая форма выполняет команды в дочерней оболочке.
+Встроенные команды, выполненные таким образом, не влияют на текущую оболочку.
+Вторая форма не запускает дочернюю оболочку,
+так что она чуть более эффективна.
+Группировка команд таким образом позволяет пользователю
+направлять их вывод так, как будто они \[em] одна команда:
+.Bd -literal -offset indent
+{ echo -n "здравствуй"; echo " мир"; } > приветствие
+.Ed
+.Ss Функции
+Синтаксис определения функции:
+.Pp
+.D1 Ar имя Li \&( \&) Ar команда
+.Pp
+Определение функции \[em] это выполняемое выражение;
+выполняясь, оно устанавливает функцию с названием
+.Ar имя
+и возвращает статус завершения ноль.
+Команда \[em] это обычно список,
+заключённый в
+.Ql {
+.Ql } .
+.Pp
+Переменные могут быть объявлены локальными к функции,
+используя команду
+.Ic local .
+Это должно быть первым выражением функции,
+синтаксис этой команды такой:
+.Pp
+.D1 Ic local Oo Ar переменная ... Oc Op Fl
+.Pp
+Команда
+.Ic local
+реализована как встроенная команда.
+.Pp
+Когда переменная объявляется локальной, она наследует начальное
+значение и флаги
+.Dq экспортировать
+.Dq "только для чтения"
+от переменной
+с таким же именем в окружающей области видимости, если
+таковая имеется.
+В противном случае переменная изначально не установлена.
+Оболочка
+использует динамические области видимости, так, что если переменная
+.Va x
+объявлена локальной для функции
+.Em f ,
+которая затем вызывает функцию
+.Em g ,
+ссылки на переменную
+.Va x ,
+сделанные в
+.Em g ,
+будут относиться к переменной
+.Va x ,
+объявленной внутри
+.Em f ,
+а не к глобальной переменной
+.Va x .
+.Pp
+Единственный специальный параметр, который может быть сделан
+локальным \[em] это
+.Ql - .
+Если сделать
+.Ql -
+локальным, то все опции оболочки,
+изменённые с помощью команды
+.Ic set
+внутри функции,
+будут восстановлены в оригинальные значения после возврата
+из функции.
+.Pp
+Синтаксис команды
+.Ic return
+такой:
+.Pp
+.D1 Ic return Op Ar статус_завершения
+.Pp
+Она завершает работу текущего контекста выполнения, возвращаясь из предыдущей
+вложенной функции, выполняемого сценария или экземпляра оболочки,
+в указанном порядке.
+Команда
+.Ic return
+реализована как встроенная команда.
+.Ss Переменные и параметры
+Оболочка поддерживает набор параметров.
+Параметр,
+обозначаемый именем, называется переменной.
+При старте
+оболочка превращает все переменные окружения в переменные
+оболочки.
+Новые переменные могут быть установлены с помощью формы
+.Pp
+.D1 Ar имя Ns = Ns Ar значение
+.Pp
+Переменные, устанавливаемые пользователем, должны иметь имя, состоящее
+исключительно из буквенно-цифровых символов и знаков подчёркивания.
+Первая буква имени переменной не должна быть цифрой.
+Параметр также может обозначаться числом или
+специальным символом, как объяснено ниже.
+.Ss Позиционные параметры
+Позиционный параметр \[em] это параметр, обозначенный числом больше нуля.
+Оболочка изначально устанавливает их в значения аргументов командной строки,
+которые следуют за именем сценария оболочки.
+Для установки и сброса этих параметров можно также воспользоваться
+встроенной командой
+.Ic set .
+.Ss Специальные параметры
+Специальный параметр \[em] это параметр, обозначенный специальным
+односимвольным именем.
+Специальные параметры, понимаемые оболочкой
+.Nm
+во
+.Fx ,
+показаны в следующем списке точно в том виде, в котором они должны появляться
+во вводе пользователя или в исходном тексте сценария оболочки.
+.Bl -hang
+.It Li $*
+Раскрывается в позиционные параметры, начиная с первого.
+Если
+раскрытие происходит внутри строки, заключённой в двойные кавычки,
+то оно раскрывается в одно поле со значением всех параметров,
+разделённых первым символом из переменной
+.Va IFS ,
+или пробелом, если
+.Va IFS
+не установлена.
+.It Li $@
+Раскрывается в позиционные параметры, начиная с первого.
+Если
+раскрытие происходит внутри строки, заключённой в двойные кавычки,
+каждый позиционный параметр раскрывается как отдельный аргумент.
+Если позиционных параметров нет, раскрытие
+.Li @
+производит ноль аргументов, даже если
+.Li @
+заключено в двойные кавычки.
+Что это означает, так это что если,
+например,
+.Li $1
+равен
+.Dq Li абв
+.Li $2
+равен
+.Dq Li "где жзи" ,
+то
+.Dq Li $@
+раскрывается
+в два аргумента:
+.Bd -literal -offset indent
+"абв" "где жзи"
+.Ed
+.It Li $#
+Раскрывается в число позиционных параметров.
+.It Li $?
+Раскрывается в статус завершения последнего конвейера.
+.It Li $-
+(дефис) Раскрывается во флаги текущих опций (однобуквенные
+имена опций, объединённые в строку), как указано при
+вызове, с помощью встроенной команды
+.Ic set
+или неявно
+самой оболочкой.
+.It Li $$
+Раскрывается в идентификатор процесса запущенной оболочки.
+Дочерняя оболочка
+сохраняет значение
+.Va $
+родительской оболочки.
+.It Li $!
+Раскрывается в идентификатор процесса последней команды,
+запущенной в фоновом режиме из текущей оболочки.
+Для конвейера
+это будет идентификатор процесса последней команды в
+конвейере.
+.It Li $0
+(ноль) Раскрывается в имя оболочки или сценария оболочки.
+.El
+.Ss Раскрытие слов
+Этот раздел описывает различные раскрытия,
+выполняемые над словами.
+Не все раскрытия выполняются над
+каждым словом, как объясняется дальше.
+.Pp
+Раскрытие тильды, раскрытие параметров, подстановка команды,
+арифметическое раскрытие и удаление кавычек, происходящие внутри
+одного слова, раскрываются в одно поле.
+Только разбиение на
+поля и раскрытие пути файла могут сделать несколько
+полей из одного слова.
+Единственное исключение из этого правила \[em]
+раскрытие специального параметра
+.Va @
+внутри двойных кавычек,
+как описано выше.
+.Pp
+Порядок раскрытия слов такой:
+.Bl -enum
+.It
+Раскрытие тильды, раскрытие параметров, подстановка
+команды, арифметическое раскрытие (всё это происходит одновременно).
+.It
+Разбиение на поля производится над полями, произведёнными шагом (1),
+если переменная
+.Va IFS
+не пустая.
+.It
+Раскрытие путей файлов (если не включена опция
+.Fl f ) .
+.It
+Удаление кавычек.
+.El
+.Pp
+Для вставки раскрытия параметров,
+подстановки команды и арифметических вычислений
+используется символ
+.Ql $ .
+.Ss Раскрытие тильды (подстановка домашнего каталога пользователя)
+Слово, начинающееся с неэкранированного символа тильды
+.Pq Ql ~
+подвергается раскрытию тильды.
+Все символы до косой черты
+.Pq Ql /
+или конца слова расцениваются как имя пользователя
+и замещаются на домашний каталог
+пользователя.
+Если имя пользователя опущено (как в
+.Pa ~/foobar ) ,
+тильда замещается на значение переменной
+.Ev HOME
+(имя домашнего каталога текущего пользователя).
+.Ss Раскрытие параметров
+Формат раскрытия параметров такой:
+.Pp
+.D1 Li ${ Ns Ar выражение Ns Li }
+.Pp
+где
+.Ar выражение
+состоит из всех символов до закрывающей
+.Ql } .
+Любой символ
+.Ql } ,
+экранированный обратной косой чертой или находящийся внутри
+заключённой в кавычки строки, а также символы во встроенных
+арифметических раскрытиях, подстановках команд и
+раскрытиях переменных, не проверяются на наличие закрывающей
+.Ql } .
+.Pp
+Простейшая форма раскрытия параметров такая:
+.Pp
+.D1 Li ${ Ns Ar параметр Ns Li }
+.Pp
+Подставляется значение параметра, если оно есть.
+.Pp
+Имя параметра или символическое имя могут быть заключены в фигурные скобки,
+которые не являются обязательными, за исключением случаев с позиционными
+параметрами, имя которых состоит из более чем одной цифры, или когда
+за параметром следует символ, который может быть расценен как часть имени
+параметра.
+Если раскрытие параметра происходит внутри двойных кавычек:
+.Bl -enum
+.It
+Раскрытие имени пути не производится над результатом этого
+раскрытия.
+.It
+Разбиение на поля не производится над результатом этого
+раскрытия, за исключением специального параметра
+.Va @ .
+.El
+.Pp
+В дополнение, раскрытие параметров может быть модифицировано с помощью
+следующих форматов.
+.Bl -tag -width indent
+.It Li ${ Ns Ar параметр Ns Li :- Ns Ar слово Ns Li }
+Использовать значение по умолчанию.
+Если
+.Ar параметр
+не установлен или пустой, подставляется раскрытие
+слова, иначе подставляется
+значение параметра.
+.It Li ${ Ns Ar параметр Ns Li := Ns Ar слово Ns Li }
+Присвоить значение по умолчанию.
+Если
+.Ar параметр
+не установлен или пустой, параметру присваивается раскрытие слова.
+В любом случае,
+подставляется
+конечное значение параметра.
+Только переменные могут принимать значения таким образом,
+позиционные и специальные параметры не могут.
+.It Li ${ Ns Ar параметр Ns Li :? Ns Oo Ar слово Oc Ns Li }
+Сообщить об ошибке если
+.Ar параметр
+пустой или не установлен.
+Если
+.Ar параметр
+не установлен или пустой, раскрытие
+слова (или сообщение об отсутствии значения, если
+.Ar слово
+опущено) пишется в стандартный
+файл ошибок, и оболочка завершается с ненулевым
+статусом завершения.
+В противном случае, подставляется
+значение параметра.
+Интерактивная оболочка не нуждается в завершении.
+.It Li ${ Ns Ar параметр Ns Li :+ Ns Ar слово Ns Li }
+Использовать альтернативное значение.
+Если
+.Ar параметр
+не установлен или пустой, подставляется пустое значение;
+в противном случае, подставляется
+раскрытие слова.
+.El
+.Pp
+В раскрытиях параметров, показанных выше, двоеточие означает,
+что параметр проверяется на предмет неустановленности или пустого значения;
+отсутствие двоеточия означает, что параметр проверяется только на предмет
+неустановленности.
+.Bl -tag -width indent
+.It Li ${# Ns Ar параметр Ns Li }
+Длина строки.
+Длина строки значения параметра
+в символах.
+.El
+.Pp
+Следующие четыре разновидности раскрытия параметров предоставляют
+возможность манипуляции подстроками.
+В любом случае, при вычислении шаблонов
+используется формат сопоставления шаблонов
+(см.\&
+.Sx Шаблоны оболочки ) ,
+а не регулярные выражения.
+Если параметр \[em] один из специальных символов
+.Va *
+или
+.Va @ ,
+результат раскрытия не определён.
+Заключение целой строки с раскрытием параметра в двойные кавычки не
+приводит к экранированию этих четырёх разновидностей шаблонных символов,
+тогда как экранирование символов внутри фигурных скобок будет иметь этот эффект.
+.Bl -tag -width indent
+.It Li ${ Ns Ar параметр Ns Li % Ns Ar слово Ns Li }
+Удалить наименьший суффикс по шаблону.
+Слово
+раскрывается, чтобы получить шаблон.
+После этого, в результате раскрытия параметра происходит
+подстановка значения параметра с удалённой наименьшей
+частью суффикса, соответствующей шаблону.
+.It Li ${ Ns Ar параметр Ns Li %% Ns Ar слово Ns Li }
+Удалить наибольший суффикс по шаблону.
+Слово
+раскрывается, чтобы получить шаблон.
+После этого, в результате раскрытия параметра происходит
+подстановка значения параметра с удалённой наибольшей
+частью суффикса, соответствующей шаблону.
+.It Li ${ Ns Ar параметр Ns Li # Ns Ar слово Ns Li }
+Удалить наименьший префикс по шаблону.
+Слово
+раскрывается, чтобы получить шаблон.
+После этого, в результате раскрытия параметра происходит
+подстановка значения параметра с удалённой наименьшей
+частью префикса, соответствующей шаблону.
+.It Li ${ Ns Ar параметр Ns Li ## Ns Ar слово Ns Li }
+Удалить наибольший префикс по шаблону.
+Слово раскрывается, чтобы получить шаблон.
+После этого, в результате раскрытия параметра происходит
+подстановка значения параметра с удалённой наибольшей
+частью префикса, соответствующей шаблону.
+.El
+.Ss Подстановка команды
+Подстановка команды позволяет подставить вывод команды
+вместо самой команды.
+Подстановка команды происходит, если
+команда заключена следующим образом:
+.Pp
+.D1 Li $( Ns Ar команда Ns Li )\&
+.Pp
+или вариант с заключением в обратные кавычки:
+.Pp
+.D1 Li ` Ns Ar команда Ns Li `
+.Pp
+Оболочка выполняет команду в дочерней оболочке и раскрывает подстановку
+команды, заменяя её на стандартный вывод команды,
+убирая последовательности из одного или более символов
+новой строки из конца подстановки.
+Символы новой строки, встречающиеся перед концом вывода команды, не удаляются;
+однако, во время разбиения на поля они могут быть переведены в пробелы,
+в зависимости от значения
+.Va IFS
+и экранирования, которое действует в настоящий момент.
+.Ss Арифметическое раскрытие
+Арифметическое раскрытие предоставляет механизм для вычисления арифметического
+выражения и подстановки его значения.
+Формат арифметического раскрытия такой:
+.Pp
+.D1 Li $(( Ns Ar выражение Ns Li ))
+.Pp
+Выражение рассматривается как если бы оно было в двойных кавычках,
+за исключением того, что двойные кавычки внутри выражения не интерпретируются
+специальным образом.
+Оболочка раскрывает все составляющие выражения по схемам раскрытия параметров,
+подстановок команд и удаления кавычек.
+.Pp
+Следующим шагом оболочка интерпретирует полученное как арифметическое
+выражение и подставляет значение выражения.
+.Ss Разделение пробельными символами (разбиение на поля)
+После раскрытия параметров, подстановки команд и
+арифметического раскрытия, оболочка сканирует результаты
+этих преобразований, которые не были заключены в двойные кавычки, на
+предмет разбиения на поля, в результате чего может появиться несколько полей.
+.Pp
+Оболочка расценивает каждый символ переменной
+.Va IFS
+как разделитель, и использует разделители для разбиения на поля
+результатов раскрытия параметров и подстановок команд.
+.Ss Раскрытие пути (генерация имён файлов)
+Если опция
+.Fl f
+не установлена,
+то после разделения на слова
+происходит генерация имён файлов.
+Каждое слово
+рассматривается как последовательность шаблонов, разделённых косыми чертами.
+Процесс раскрытия замещает слово именами
+всех существующих файлов, чьи имена могут быть сформированы заменой
+каждого шаблона на строку, соответствующую указанному шаблону.
+Здесь есть два ограничения: во-первых, шаблон не может соответствовать
+строке, содержащей косую черту, и во-вторых,
+шаблон не может соответствовать строке, начинающейся с точки,
+если первый символ шаблона не точка.
+Следующий раздел описывает шаблоны, используемые при
+раскрытии пути и командой
+.Ic case .
+.Ss Шаблоны оболочки
+Шаблон состоит из обычных символов, которые соответствуют себе же,
+и мета-символов.
+Мета-символы \[em] это
+.Ql \&! ,
+.Ql * ,
+.Ql \&? ,
+.Ql \&[ .
+Эти символы утрачивают своё специальное значение, если они экранированы.
+Когда производится подстановка команды или переменной, и знак доллара
+или обратные кавычки не заключены в двойные кавычки, эти символы ищутся
+в значении переменной или выводе команды и считаются мета-символами.
+.Pp
+Звёздочка
+.Pq Ql *
+соответствует любой строке символов.
+Знак вопроса
+.Pq Ql \&?
+соответствует одному любому символу.
+Левая квадратная скобка
+.Pq Ql \&[
+задаёт класс символов.
+Конец класса символов указывается символом
+.Ql \&] ;
+если
+.Ql \&]
+опущен, символ
+.Ql \&[ ,
+вместо того, чтобы задать класс символов,
+соответствует символу
+.Ql \&[ .
+Класс символов соответствует любому из символов внутри квадратных скобок.
+Диапазон символов может быть задан с помощью знака минус.
+Класс символов может быть дополнен, если первым символом класса символов
+указать знак восклицания
+.Pq Ql !\& .
+.Pp
+Чтобы включить
+.Ql \&]
+в класс символов, его нужно указать первым символом в списке
+(после символа
+.Ql \&! ,
+если он есть).
+Чтобы включить
+.Ql - ,
+его нужно указать первым или последним символом в списке.
+.Ss Встроенные команды
+Данный раздел перечисляет команды, которые
+реализованы как встроенные, поскольку им необходимо выполнять некоторые
+операции, которые не могут быть выполнены отдельным процессом.
+В дополнение к
+таким командам, из соображений эффективности также доступны встроенные
+версии важных утилит.
+.Bl -tag -width indent
+.It Ic \&:
+Пустая команда, возвращающая статус завершения 0 (истина).
+.It Ic \&. Ar файл
+Оболочка читает команды из указанного файла и выполняет их.
+Чтобы вернуться к месту вызова команды
+.Ic \&. ,
+следует использовать команду
+.Ic return .
+Если
+.Ar файл
+содержит символы
+.Ql / ,
+он используется как есть.
+В противном случае, оболочка ищет файл в
+.Ev PATH .
+Если файл не найден в
+.Ev PATH ,
+он ищется в текущем рабочем каталоге.
+.It Ic \&[
+Встроенный эквивалент
+.Xr test 1 .
+.It Ic alias Oo Ar имя Ns Oo = Ns Ar строка Oc ... Oc
+Если указано
+.Ar имя Ns = Ns Ar строка ,
+оболочка создаёт псевдоним
+.Ar имя
+со значением
+.Ar строка .
+Если указано только
+.Ar имя ,
+выводится значение псевдонима
+.Ar имя .
+Без аргументов, встроенная команда
+.Ic alias
+выводит имена и значения всех существующих псевдонимов
+(см.\&
+.Ic unalias ) .
+Значения псевдонимов печатаются с соответствующим экранированием,
+пригодным для повторного ввода их в оболочку.
+Также смотрите раздел
+.Sx Псевдонимы .
+.It Ic bg Op Ar задание ...
+Продолжить выполнение заданий (или текущего задания, если задания не указаны)
+в фоновом режиме.
+.It Ic builtin Ar команда Op Ar аргумент ...
+Выполнить встроенную команду
+.Ar команда .
+Это удобно, когда пользователь хочет выполнить встроенную команду,
+в то время как существует функция оболочки с таким же именем.
+.It Ic bind Oo Fl aeklrsv Oc Oo Ar клавиша Oo Ar команда Oc Oc
+Перечислить или изменить привязки клавиш для редактора строки.
+Эта команда документирована в
+.Xr editrc 5 .
+.It Ic cd Oo Fl L | P Oc Op Ar каталог
+Перейти в указанный
+.Ar каталог
+или в каталог, указанный в переменной окружения
+.Ev HOME ,
+если
+.Ar каталог
+не указан.
+Если
+.Ar каталог
+не начинается с
+.Pa / , \&.
+или
+.Pa .. ,
+он ищется в каталогах, перечисленных в переменной
+.Ev CDPATH .
+Если
+.Ev CDPATH
+не установлена, он ищется в текущем каталоге.
+Формат
+.Ev CDPATH
+такой же как у
+.Ev PATH .
+В интерактивной оболочке команда
+.Ic cd
+выведет имя каталога, в который был совершён переход,
+если это имя отличается от того, которое указал пользователь.
+Они могут отличаться в результате использования механизма
+.Ev CDPATH
+или из-за перехода по символической ссылке.
+.Pp
+Если указана опция
+.Fl P ,
+.Pa ..
+обрабатывается физически, и символические ссылки разыменовываются перед
+обработкой компонентов
+.Pa .. .
+Если указана опция
+.Fl L ,
+.Pa ..
+обрабатывается логически.
+Это стандартное поведение.
+.It Ic chdir
+Синоним для встроенной команды
+.Ic cd .
+.It Ic command Oo Fl p Oc Op Ar утилита Op Ar аргумент ...
+.It Ic command Oo Fl v | V Oc Op Ar утилита
+Первая форма вызова исполняет указанную утилиту
+как простую команду (см.\& раздел
+.Sx Простые команды ) .
+.Pp
+Если указана опция
+.Fl p ,
+поиск команды осуществляется с помощью значения
+.Ev PATH
+по умолчанию, что гарантирует нахождение всех
+стандартных утилит.
+.Pp
+Если указана опция
+.Fl v ,
+.Ar утилита
+не выполняется, а вместо этого выводится описание её интерпретации оболочкой.
+Для обычных команд это полный путь к команде.
+Для встроенных команд оболочки, функций оболочки и ключевых слов
+выводится только имя.
+Псевдонимы выводятся в форме
+.Dq Ic alias Ar имя Ns = Ns Ar значение .
+.Pp
+Опция
+.Fl V
+идентична
+.Fl v
+за исключением вывода.
+Она выводит
+.Dq Ar утилита Ic is Ar описание ,
+где
+.Ar описание
+\[em]
+одно из:
+полный полный путь к утилите,
+a shell builtin,
+a shell function,
+a shell keyword
+или
+an alias for
+.Ar значение .
+.It Ic echo Oo Fl e | n Oc Op Ar строка ...
+Вывести на стандартный вывод список аргументов, разделённых пробелами,
+и добавить символ новой строки.
+.Bl -tag -width indent
+.It Fl n
+Не добавлять в конец вывода символ новой строки.
+.It Fl e
+Обрабатывать управляющие последовательности с обратной косой чертой в стиле C.
+Команда
+.Ic echo
+понимает следующие последовательности символов:
+.Bl -tag -width indent
+.It \ea
+Сигнал тревоги (позвонить в звонок терминала)
+.It \eb
+Забой
+.It \ec
+Не добавлять в конец символ новой строки (это имеет побочный эффект
+обрезания строки, если это не последний символ)
+.It \ee
+Символ ESC
+.Tn ( ASCII
+код 0x1b)
+.It \ef
+Символ
+.Dq "подача страницы"
+.It \en
+Новая строка
+.It \er
+Возврат каретки
+.It \et
+Горизонтальная табуляция
+.It \ev
+Вертикальная табуляция
+.It \e\e
+Символ обратной косой черты
+.It \e0nnn
+(Ноль) Символ с восьмеричным значением
+.Ar nnn
+.El
+.Pp
+Если
+.Ar строка
+не заключена в кавычки, обратная косая черта должна быть экранирована
+ещё одной обратной косой чертой, чтобы защитить её от оболочки.
+Например,
+.Bd -literal -offset indent
+$ echo -e "a\evb"
+a
+ b
+$ echo -e a\e\evb
+a
+ b
+$ echo -e "a\e\eb"
+a\eb
+$ echo -e a\e\e\e\eb
+a\eb
+.Ed
+.El
+.Pp
+Может быть указана только одна из опций
+.Fl e
+.Fl n .
+.It Ic eval Ar строка ...
+Соединить все аргументы в строку, разделяя их пробелами.
+После этого разобрать заново и выполнить команду.
+.It Ic exec Op Ar команда Op аргумент ...
+Если
+.Ar команда
+не опущена, процесс оболочки замещается на указанную программу
+(которая должна быть настоящей программой, не встроенной командой
+и не функцией оболочки).
+Любые перенаправления в команде
+.Ic exec
+делаются постоянными,
+так что они остаются и после завершения команды
+.Ic exec .
+.It Ic exit Op Ar статус_завершения
+Прервать выполнение процесса оболочки.
+Если указан
+.Ar статус_завершения ,
+он используется как статус завершения оболочки;
+в противном случае используется статус завершения предшествующей команды.
+.It Ic export Ar имя ...
+.It Ic export Op Fl p
+Указанные имена экспортируются так, что они будут
+видны в окружении далее выполняемых команд.
+Единственная возможность отменить экспортирование переменной \[em] это
+сбросить её с помощью команды
+.Ic unset .
+Оболочка позволяет установить значение переменной одновременно с её
+экспортированием, используя запись вида
+.Pp
+.D1 Ic export Ar имя Ns = Ns Ar значение
+.Pp
+Без аргументов команда
+.Ic export
+перечисляет имена всех экспортируемых переменных.
+Если указана опция
+.Fl p ,
+экспортируемые переменные выводятся в виде
+.Dq Ic export Ar имя Ns = Ns Ar значение
+так, что вывод пригоден для повторного ввода этих переменных в оболочку.
+.It Ic false
+Пустая команда, возвращающая ненулевой статус завершения (ложь).
+.It Ic fc Oo Fl e Ar редактор Oc Op Ar первая Op Ar последняя
+.It Ic fc Fl l Oo Fl nr Oc Op Ar первая Op Ar последняя
+.It Ic fc Fl s Oo Ar старая Ns = Ns Ar новая Oc Op Ar первая
+Встроенная команда
+.Ic fc
+перечисляет, или редактирует и выполняет заново команды,
+ранее введённые в интерактивную оболочку.
+.Bl -tag -width indent
+.It Fl e Ar редактор
+Использовать указанный
+.Ar редактор
+для редактирования команд.
+Аргумент
+.Ar редактор
+задаёт имя команды,
+с возможным поиском через переменную
+.Ev PATH .
+Если опция
+.Fl e
+не указана, используется значение переменной
+.Ev FCEDIT .
+Если
+.Ev FCEDIT
+пустая или не установлена, используется значение переменной
+.Ev EDITOR .
+Если
+.Ev EDITOR
+пустая или не установлена, в качестве редактора используется
+.Xr ed 1 .
+.It Fl l
+Перечислить команды, вместо того чтобы их редактировать.
+Команды выводятся в
+порядке, указанном операндами
+.Ar первая
+.Ar последняя ,
+также зависящем от
+.Fl r ,
+где каждой команде предшествует её номер.
+.It Fl n
+Не выводить номера команд при перечислении с помощью
+.Fl l .
+.It Fl r
+Выводить перечисляемые
+(с помощью
+.Fl l )
+или редактируемые (без
+.Fl l
+и без
+.Fl s )
+команды в обратном порядке.
+.It Fl s
+Выполнить команду ещё раз, не вызывая редактор.
+.It Ar первая
+.It Ar последняя
+Выбрать команды для перечисления или редактирования.
+Количество доступных предыдущих команд определяется
+значением переменной
+.Ev HISTSIZE .
+Значение параметров
+.Ar первая , последняя
+или обоих может быть одним из следующих:
+.Bl -tag -width indent
+.It Oo Cm + Oc Ns Ar число
+Положительное число, представляющее номер команды;
+номера команд могут быть показаны с помощью опции
+.Fl l .
+.It Fl Ar число
+Отрицательное десятичное число, представляющее
+команду, которая была выполнена
+.Ar число
+команд назад.
+Например, \-1 это последняя выполненная команда.
+.It Ar строка
+Строка, обозначающая последнюю введённую команду,
+которая начинается с этой строки.
+Если при этом с опцией
+.Fl s
+не указан операнд
+.Ar старая Ns = Ns Ar новая ,
+строковая форма первого операнда не может содержать знак равенства.
+.El
+.El
+.Pp
+Следующие переменные окружения влияют на выполнение
+.Ic fc :
+.Bl -tag -width ".Ev HISTSIZE"
+.It Ev FCEDIT
+Имя редактора для редактирования истории.
+.It Ev HISTSIZE
+Количество доступных предыдущих команд.
+.El
+.It Ic fg Op Ar задание
+Переместить указанное
+.Ar задание
+или текущее задание на передний план.
+.It Ic getopts Ar строка_опций переменная
+.Tn POSIX Ns -совместимая
+команда
+.Ic getopts .
+Её следует использовать вместо более старой команды
+.Xr getopt 1 .
+Первый аргумент должен быть последовательностью букв, за каждой из которых
+может следовать двоеточие, обозначающее, что опция имеет аргумент.
+Указанная переменная устанавливается в разобранную опцию.
+Индекс следующего аргумента помещается в переменную оболочки
+.Va OPTIND .
+Если опция имеет аргумент, он помещается в переменную оболочки
+.Va OPTARG .
+Если встречается некорректная опция,
+.Ar переменная
+устанавливается в
+.Ql \&? .
+Когда опции заканчиваются,
+.Ic getopts
+возвращает значение ложь (1).
+.It Ic hash Oo Fl rv Oc Op Ar команда ...
+Оболочка поддерживает хэш-таблицу, в которой запоминаются местоположения команд.
+Без аргументов команда
+.Ic hash
+выводит содержимое этой таблицы.
+Записи, которые не искались с момента последней команды
+.Ic cd ,
+помечаются звёздочкой; эти записи уже возможно некорректны.
+.Pp
+Если указаны аргументы, команда
+.Ic hash
+удаляет каждую указанную команду (если это не функция) из хэш-таблицы,
+а затем ищет её.
+С опцией
+.Fl v
+.Ic hash
+выводит местоположение команд по мере того, как находит их.
+С опцией
+.Fl r
+команда
+.Ic hash
+удаляет все записи из хэш-таблицы за исключением функций.
+.It Ic jobid Op Ar задание
+Выводит идентификаторы процессов в указанном задании.
+Если аргумент
+.Ar задание
+опущен, используется текущая задание.
+.It Ic jobs Oo Fl lps Oc Op Ar задание ...
+Выводит информацию об указанных заданиях или всех заданиях,
+если не указан аргумент
+.Ar задание .
+Выводимая информация включает в себя идентификатор задания,
+статус и имя команды.
+.Pp
+Если указана опция
+.Fl l ,
+также выводится идентификатор процесса каждого задания.
+Если указана опция
+.Fl p ,
+выводятся только идентификаторы процессов лидеров групп процессов,
+по одному на строку.
+Если указана опция
+.Fl s ,
+выводятся только идентификаторы процессов, по одному на строку.
+.It Ic local Oo Ar переменная ... Oc Op Fl
+Смотрите раздел
+.Sx Функции .
+.It Ic pwd Op Fl L | P
+Выводит путь текущего каталога.
+Встроенная команда может
+отличаться от программы с таким же именем, потому что
+встроенная команда помнит текущий каталог, а не вычисляет его каждый раз.
+Это делает её быстрее.
+Однако, если текущий каталог
+переименовывается,
+встроенная версия
+.Xr pwd 1
+продолжит выводить старое имя каталога.
+.Pp
+Если указана опция
+.Fl P ,
+разыменовываются символические ссылки.
+Если указана опция
+.Fl L ,
+выводится представление оболочки о текущем каталоге
+(символические ссылки не разыменовываются).
+Это стандартное поведение.
+.It Ic read Oo Fl p Ar приглашение Oc Oo
+.Fl t Ar таймаут Oc Oo Fl er Oc Ar переменная ...
+Если указана опция
+.Fl p
+и стандартный ввод является терминалом,
+выдаётся
+.Ar приглашение .
+Затем со стандартного ввода читается строка.
+Замыкающий символ новой строки
+удаляется, и строка разбивается, как описано в разделе
+.Sx Разделение пробельными символами (разбиение на поля)
+выше, и
+полученные части присваиваются переменным по порядку.
+Если частей больше чем переменных, оставшиеся
+части (вместе с символами из
+.Va IFS ,
+которые их разделяют),
+присваиваются последней переменной.
+Если переменных больше чем частей, оставшимся
+переменным присваивается пустая строка.
+.Pp
+Обратные косые черты интерпретируются специальным образом, если не
+указана опция
+.Fl r .
+Если за обратной косой чертой следует символ новой строки,
+обратная косая черта и символ новой строки удаляются.
+Если за обратной косой чертой следует какой-либо другой
+символ, обратная косая черта удаляется, а следующий за ней
+символ интерпретируется так, как если бы он не содержался в
+.Va IFS ,
+даже если на самом деле он там есть.
+.Pp
+Если указана опция
+.Fl t ,
+.Ar таймаут
+истёк прежде, чем был осуществлён ввод, команда
+.Ic read
+возвращает статус завершения 1 и не делает никаких присваиваний.
+Значение аргумента
+.Ar таймаут
+может необязательно сопровождаться одним из символов
+.Ql s ,
+.Ql m
+или
+.Ql h ,
+что явно обозначает секунды, минуты или часы.
+Если такой символ не указан, подразумевается
+.Ql s .
+.Pp
+Опция
+.Fl e
+существует только для обратной совместимости со старыми сценариями.
+.It Ic readonly Oo Fl p Oc Op Ar имя ...
+Каждое указанное
+.Ar имя
+помечается как
+.Dq "только для чтения"
+так, что оно не может быть в последствии изменено или сделано
+неустановленным.
+Оболочка позволяет установить значение переменной
+одновременно с пометкой его как
+.Dq "только для чтения" ,
+с помощью такой формы:
+.Pp
+.D1 Ic readonly Ar имя Ns = Ns Ar значение
+.Pp
+Без аргументов команда
+.Ic readonly
+перечисляет имена всех переменных
+.Dq "только для чтения" .
+Если указана опция
+.Fl p ,
+переменные
+.Dq "только для чтения"
+выводятся в виде строк
+.Dq Ic readonly Ar имя Ns = Ns Ar значение ,
+пригодном для повторного ввода в оболочку.
+.It Ic return Op Ar статус_завершения
+Смотрите раздел
+.Sx Функции .
+.It Ic set Oo Fl /+abCEefIimnpTuVvx Oc Oo Fl /+o Ar длинное_имя Oc Oo
+.Fl c Ar строка Oc Op Fl - Ar аргумент ...
+Команда
+.Ic set
+выполняет три разных функции:
+.Bl -item
+.It
+Без аргументов она перечисляет значения всех переменных оболочки.
+.It
+Если указаны опции, либо в короткой форме, либо в длинной форме
+.Dq Fl /+o Ar длинное_имя ,
+она устанавливает или сбрасывает указанные опции, как описано в разделе
+.Sx Обработка списка аргументов .
+.It
+Если указана опция
+.Dq Fl - ,
+.Ic set
+заменяет позиционные параметры оболочки последующими
+аргументами.
+Если за опцией
+.Dq Fl -
+не следуют аргументы,
+все позиционные параметры сбрасываются,
+что эквивалентно выполнению команды
+.Dq Li "shift $#" .
+Флаг
+.Dq Fl -
+может быть опущен, если аргументы предназначаются для замещения
+позиционных параметров.
+Это не рекомендуется,
+так как первый аргумент может начинаться с тире
+.Pq Ql -
+или плюса
+.Pq Ql + ,
+которые команда
+.Ic set
+интерпретирует как запрос на установку или сброс опций.
+.El
+.It Ic setvar Ar переменная значение
+Назначает указанное
+.Ar значение
+указанной переменной.
+Команда
+.Ic setvar
+предназначена для использования в функциях,
+присваивающих значения переменным, чьи имена передаются как параметры.
+В общем случае лучше писать
+.Dq Ar переменная Ns = Ns Ar значение
+нежели использовать
+.Ic setvar .
+.It Ic shift Op Ar n
+Сдвигает позиционные параметры
+.Ar n
+раз, или один раз, если
+.Ar n
+не указано.
+Сдвиг устанавливает значение
+.Li $1
+в значение
+.Li $2 ,
+значение
+.Li $2
+в значение
+.Li $3 ,
+и так далее,
+уменьшая значение
+.Li $#
+на единицу.
+Если позиционных параметров нет, сдвиг не делает ничего.
+.It Ic test
+Встроенный эквивалент
+.Xr test 1 .
+.It Ic times
+Выводит количество времени, потраченное на выполнение оболочки и её потомков.
+Первая строка вывода показывает пользовательское и системное время для самой
+оболочки, вторая \[em] для потомков.
+.It Ic trap Oo Ar действие Oc Ar сигнал ...
+.It Ic trap Fl l
+Велит оболочке разобрать и выполнить
+.Ar действие
+при получении любого из указанных сигналов.
+Сигналы указываются либо по имени, либо по номеру.
+Кроме того, чтобы задать
+.Ar действие ,
+выполняемое при завершении оболочки, можно воспользоваться псевдо-сигналом
+.Cm EXIT .
+Аргумент
+.Ar действие
+может быть пустой строкой или тире
+.Pq Ql - ;
+первое означает игнорировать указанный сигнал,
+второе \[em] выполнять действие по умолчанию.
+Пропуск аргумента
+.Ar действие
+также означает выполнение действия по умолчанию, хотя из соображений
+совместимости такая форма не рекомендуется.
+Когда оболочка запускает дочернюю оболочку, она
+сбрасывает перехваченные (но не игнорируемые) сигналы в стандартные действия.
+Команда
+.Ic trap
+не влияет на сигналы, игнорируемые на момент входа в оболочку.
+.Pp
+С опцией
+.Fl l
+команда
+.Ic trap
+выведет список допустимых имён сигналов.
+.It Ic true
+Пустая команда, возвращающая статус завершения 0 (истина).
+.It Ic type Op Ar имя ...
+Интерпретирует каждое
+.Ar имя
+как команду и выводит результат поиска команды.
+Возможные результаты такие:
+shell keyword, alias, shell built-in command, command, tracked alias
+и not found.
+Для псевдонимов выводится их значение;
+для команд и отслеживаемых псевдонимов
+выводится полный путь к команде.
+.It Ic ulimit Oo Fl HSabcdflmnstuv Oc Op Ar ограничение
+Устанавливает или показывает ограничения на ресурсы (см.\&
+.Xr getrlimit 2 ) .
+Если указано
+.Ar ограничение ,
+указанный ресурс будет установлен;
+в противном случае выведется текущее значение ресурса.
+.Pp
+Если указана опция
+.Fl H ,
+устанавливаются или показываются жёсткие ограничения.
+В то время как всем разрешено уменьшать жёсткие ограничения,
+только суперпользователь может их увеличить.
+Если указана опция
+.Fl S ,
+используются мягкие ограничения.
+При выводе ограничений
+может быть задана только одна из опций
+.Fl S
+или
+.Fl H .
+По умолчанию показываются мягкие ограничения,
+а устанавливаются и мягкие, и жёсткие ограничения.
+.Pp
+С опцией
+.Fl a
+команда
+.Ic ulimit
+выводит все ресурсы.
+Параметр
+.Ar ограничение
+в этом режиме неприемлем.
+.Pp
+Остальные опции указывают, значение какого ресурса должно быть
+показано или изменено.
+Они взаимоисключающие.
+.Bl -tag -width indent
+.It Fl b Ar sbsize
+Максимальный размер использования буфера сокетов в байтах.
+.It Fl c Ar coredumpsize
+Максимальный размер файлов дампа памяти в блоках по 512 байт.
+.It Fl d Ar datasize
+Максимальный размер сегмента данных процесса в килобайтах.
+.It Fl f Ar filesize
+Максимальный размер файла в блоках по 512 байт.
+.It Fl l Ar lockedmem
+Максимальный размер памяти, которая может быть заблокирована процессом, в
+килобайтах.
+.It Fl m Ar memoryuse
+Максимальный размер резидентной памяти процесса в килобайтах.
+.It Fl n Ar nofiles
+Максимальное количество дескрипторов, которые может открыть процесс.
+.It Fl s Ar stacksize
+Максимальный размер сегмента стека в килобайтах.
+.It Fl t Ar time
+Максимальное количество процессорного времени, которое может использовать
+каждый процесс, в секундах.
+.It Fl u Ar userproc
+Максимальное количество одновременно выполняющихся процессов
+для этого идентификатора пользователя.
+.It Fl v Ar virtualmem
+Максимальный виртуальной размер процесса в килобайтах.
+.El
+.It Ic umask Oo Fl S Oc Op Ar маска
+Устанавливает маску создания файлов (см.\&
+.Xr umask 2 )
+в восьмеричное или символическое (см.\&
+.Xr chmod 1 )
+значение, указанное в аргументе
+.Ar маска .
+Если аргумент пропущен, выводится текущее значение маски.
+Если указана опция
+.Fl S ,
+вывод имеет символический вид, иначе \[em] восьмеричный.
+.It Ic unalias Oo Fl a Oc Op Ar имя ...
+Удаляет указанные псевдонимы.
+Если указана опция
+.Fl a ,
+удаляются все псевдонимы.
+.It Ic unset Oo Fl fv Oc Ar имя ...
+Указанные переменные или функции становятся неустановленными и
+неэкспортируемыми.
+Если указана опция
+.Fl v ,
+или не указано опций вообще, аргументы
+.Ar имя
+интерпретируются как имена переменных.
+Если указана опция
+.Fl f ,
+аргументы
+.Ar имя
+интерпретируются как имена функций.
+.It Ic wait Op Ar задание
+Ждать завершения указанного задания и вернуть статус завершения
+последнего процесса в задании.
+Если аргумент опущен, ждать завершения всех заданий и вернуть статус
+завершения ноль.
+.El
+.Ss Редактирование командной строки
+При интерактивном использовании
+.Nm
+из терминала, текущая команда
+и история команд
+(см.\&
+.Ic fc
+в разделе
+.Sx Встроенные команды )
+могут редактироваться в
+.Nm vi Ns -режиме
+редактирования командной строки.
+Этот режим использует команды подобно подмножеству команд,
+описанных в странице справочника
+.Xr vi 1 .
+Команда
+.Dq Li "set -o vi"
+(или
+.Dq Li "set -V" )
+включает
+.Nm vi Ns -режим
+редактирования и переключает
+.Nm
+в режим ввода
+.Nm vi .
+При включённом режиме
+.Nm vi ,
+.Nm
+может переключаться между режимом ввода и командным режимом клавишей
+.Aq ESC .
+Нажатие
+.Aq ввода
+в командном режиме передаёт строку на обработку оболочке.
+.Pp
+Подобным образом команда
+.Dq Li "set -o emacs"
+(или
+.Dq Li "set -E" )
+может быть использована для включения подмножества
+возможностей редактирования командной строки в стиле
+.Nm emacs .
+.Sh ОКРУЖЕНИЕ
+Следующие переменные окружения влияют на выполнение
+.Nm :
+.Bl -tag -width ".Ev HISTSIZE"
+.It Ev CDPATH
+Пути для поиска, используемые встроенной командой
+.Ic cd .
+.It Ev EDITOR
+Запасной редактор, используемый встроенной командой
+.Ic fc .
+Если переменная не установлена, то редактором по умолчанию является
+.Xr ed 1 .
+.It Ev FCEDIT
+Редактор по умолчанию, используемый встроенной командой
+.Ic fc .
+.It Ev HISTSIZE
+Количество доступных предыдущих команд.
+.It Ev HOME
+Начальный каталог
+.Nm .
+.It Ev IFS
+Разделители полей ввода.
+Переменная обычно установлена в
+.Aq пробел ,
+.Aq табуляцию
+.Aq символ новой строки .
+Подробнее смотрите раздел
+.Sx Разделение пробельными символами .
+.It Ev MAIL
+Имя файла с почтой, которое проверяется на предмет поступления новой
+почты.
+.Ev MAILPATH
+имеет больший приоритет.
+.It Ev MAILPATH
+Разделённый двоеточиями
+.Pq Ql \&:
+список имён файлов, в которых оболочка проверяет входящую почту.
+Эта переменная окружения имеет больший приоритет, чем
+.Ev MAIL .
+Одновременно может проверяться не более 10 почтовых ящиков.
+.It Ev PATH
+Путь поиска исполняемых файлов по умолчанию.
+Подробнее смотрите раздел
+.Sx Поиск пути .
+.It Ev PS1
+Первичная строка приглашения, значение по умолчанию которой
+.Dq Li "$ " ,
+если вы не суперпользователь, и
+.Dq Li "# " ,
+если суперпользователь.
+.It Ev PS2
+Вторичная строка приглашения, значение по умолчанию которой
+.Dq Li "> " .
+.It Ev PS4
+Префикс для вывода трассировки (если активирован
+.Fl x ) .
+По умолчанию
+.Dq Li "+ " .
+.It Ev TERM
+Терминал по умолчанию для оболочки.
+Эта установка наследуется дочерними процессами оболочки, и используется
+в режиме редактирования истории.
+.El
+.Sh СТАТУС ЗАВЕРШЕНИЯ
+Когда оболочка обнаруживает ошибки, такие как синтаксические, она
+завершается с ненулевым статусом завершения.
+Если оболочка неинтерактивная, выполнение файла
+оболочки прерывается.
+В противном случае, оболочка вернёт статус завершения последней
+выполненной команды, или, если была использована встроенная команда
+.Ic exit
+с числовым аргументом, оболочка вернёт этот аргумент.
+.Sh СМОТРИ ТАКЖЕ
+.Xr builtin 1 ,
+.Xr chsh 1 ,
+.Xr echo 1 ,
+.Xr ed 1 ,
+.Xr emacs 1 ,
+.Xr expr 1 ,
+.Xr getopt 1 ,
+.Xr pwd 1 ,
+.Xr test 1 ,
+.Xr vi 1 ,
+.Xr execve 2 ,
+.Xr getrlimit 2 ,
+.Xr umask 2 ,
+.Xr editrc 5
+.Sh ИСТОРИЯ
+Команда
+.Nm ,
+оболочка Thompson, появилась в
+.At v1 .
+Она была вытеснена в
+.At v7
+оболочкой Bourne, которая унаследовала имя
+.Nm .
+.Pp
+Эта версия
+.Nm
+была переписана в 1989 году под лицензией
+.Bx
+по образу и подобию оболочки Bourne из
+.At V.4 .
+.Sh АВТОРЫ
+Эту версию
+.Nm
+изначально написал
+.An Kenneth Almquist .
+.Sh ПРОБЛЕМЫ
+Утилита
+.Nm
+не распознаёт мультибайтовые символы.