From 57e5c9ce885bdf379b48254b147ed4f9093d6488 Mon Sep 17 00:00:00 2001 From: Ruslan Ermilov Date: Wed, 5 Dec 2007 12:39:59 +0000 Subject: Translate sh(1). Obtained from: The FreeBSD Russian Documentation Project --- ru_RU.KOI8-R/man/man1/Makefile | 1 + ru_RU.KOI8-R/man/man1/sh.1 | 2253 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2254 insertions(+) create mode 100644 ru_RU.KOI8-R/man/man1/sh.1 (limited to 'ru_RU.KOI8-R/man') diff --git a/ru_RU.KOI8-R/man/man1/Makefile b/ru_RU.KOI8-R/man/man1/Makefile index f698bb47fe..9bf9900855 100644 --- a/ru_RU.KOI8-R/man/man1/Makefile +++ b/ru_RU.KOI8-R/man/man1/Makefile @@ -96,6 +96,7 @@ MAN= apply.1 \ rwall.1 \ rwho.1 \ script.1 \ + sh.1 \ shar.1 \ sleep.1 \ split.1 \ 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 +не распознаёт мультибайтовые символы. -- cgit v1.2.3