mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

      SH(1)                                                     SH(1)

      НАЗВАНИЕ
              sh - стандартный интерпретатор командного языка shell

      СИНТАКСИС
    sh  [-a] [-c цепочка_символов][-e][-f][-h][-i][-k][-n][-r][-s][-t][-u][-v]
	     [-x] [аргумент ...]

      ОПИСАНИЕ
              Команда sh -  запуск  интерпретатора  командного  языка
              shell, способного выполнять команды, введенные с терми-
              нала или хранящиеся в файле. О трактовке аргументов  sh
              см. ниже Запуск shell'а.

           Определения
              Под пробелом в дальнейшем понимается не  только  собст-
              венно пробел, но также и символ табуляции.

              Имя - это последовательность букв, цифр, символов  под-
              черкивания, начинающаяся с буквы или подчеркивания.

              Параметр - это имя, цифра или любой из символов  *,  @,
              #, ?, -, $, !.

           Команды
              Простая команда - это последовательность  слов,  разде-
              ленных пробелами. Первое слово определяет имя  команды,
              которая будет выполняться; оставшиеся слова, за  исклю-
              чением описанных ниже случаев, передаются команде в ка-
              честве аргументов. Имя команды передается как  аргумент
              0 [см. exec(2)]. Значение простой команды - это ее  код
              завершения, если она выполнилась нормально, или (128  +
              код ошибки), если ненормально [см. также signal(2)].

              Конвейер - это последовательность  команд,  разделенных
              знаком |. При этом стандартный вывод всех команд, кроме
              последней, направляется посредством  системного  вызова
              pipe(2) на стандартный ввод следующей  команды  конвей-
              ера. Каждая  команда  выполняется  как  самостоятельный
              процесс; shell ожидает завершения последней команды. Ее
              код завершения становится кодом завершения конвейера.

              Список - это последовательность одного  или  нескольких
              конвейеров, разделенных символами ;, &,  &&  или  ||  и
              быть может заканчивающаяся символом ; или &. Из четырех
              указанных операций ; и & имеют равные приоритеты, мень-
              шие, чем у && и ||. Приоритеты  последних  также  равны
              между собой. Символ ; означает, что конвейеры будут вы-
              полняться последовательно,  а  & - параллельно (то есть
              shell не ожидает  завершения  конвейера).  Операция  &&
              (||) означает, что список, следующий за ней, будет  вы-
              полняться лишь в том случае, если код завершения преды-
              дущего конвейера нулевой (ненулевой). В  списке  в  ка-
              честве разделителя конвейеров вместо  символа  ;  можно
              использовать перевод строки.

              Команда - это либо простая команда, либо одна из управ-
              ляющих конструкций. Кодом завершения  команды  является
              код завершения последней выполненной простой команды.

              Управляющие конструкции:

              for имя [in слово ...]
                do список
              done
                   При каждой итерации переменная имя принимает  сле-
                   дующее значение  из  набора  in  слово  ....  Если
                   конструкция in слово ... опущена, то список выпол-
                   няется для каждого позиционного параметра (см. ни-
                   же Подстановка параметров).

              case слово in
                [шаблон [| шаблон] ...) список ;;]
                ...
              esac
                   Выполняется список, соответствующий первому шабло-
                   ну, успешно сопоставленному со словом. Формат шаб-
                   лона тот же, что и используемый для генерации имен
                   файлов (см. ниже Генерация имен файлов), за исклю-
                   чением того, что в  шаблоне  не  обязательно  явно
                   указывать  символ /, начальную точку и их комбина-
                   цию: элемент шаблона * может успешно сопоставлять-
                   ся и с ними.

              if список_1
                then список_2
               [elif список_3
                  then список_4]
                ...
               [else список_5]
              fi
                   Выполняется список_1 и если код его завершения  0,
                   то выполняется список_2, иначе - список_3  и  если
                   код его завершения 0, то  выполняется  список_4  и
                   т.д. Если же коды завершения всех списков, исполь-
                   зованных в качестве условий, оказались ненулевыми,
                   выполняется else-часть (список_5). Если else-часть
                   отсутствует, и ни одна then-часть не  выполнялась,
                   возвращается нулевой код завершения.

              while список_1
                do список_2
              done
                   Пока код  завершения  последней  команды  списка_1
                   есть 0, выполняются команды списка_2.  При  замене
                   служебного слова while на until условие  продолже-
                   ния цикла меняется на противоположное. Если коман-
                   ды из списка_2, не выполнялись вообще, код  завер-
                   шения устанавливается равным нулю.

              (список)
                   Группировка команд для выполнения  их  порожденным
                   shell'ом.

              {список;}
                   Группировка  команд  для  выполнения  их   текущим
                   shell'ом.

              имя ( )
                {список;}
                   Определение функции с заданным именем. Тело  функ-
                   ции - список, заключенный между { и }. О  выполне-
                   нии функций см. ниже Выполнение.

              Следующие слова трактуются как ключевые, если они явля-
              ются первым словом команды и не экранированы:

                   if  then  elif  else  fi
                   case  in  esac
                   for  while  until  do  done
                   {  }

           Комментарии
              Слово, начинающееся символом #, и все последующие слова
              вплоть до перевода строки, игнорируются.

           Подстановка результатов выполнения команд
              Shell читает цепочки символов, заключенные  в  обратные
              кавычки (`, в дальнейшем называются  символами  подста-
              новки), и интерпретирует эти цепочки как команды. Такие
              команды выполняются в месте использования.  Стандартный
              вывод этих команд может быть использован как все  слово
              или как его часть. Хвостовые символы перевода строки из
              стандартного вывода удаляются.

              До  интерпретации цепочек как команд с ними не произво-
              дится никаких действий, кроме удаления символов \,  ис-
              пользующихся для экранирования символов подстановки или
              другого  символа  \. Экранирование символов подстановки
              позволяет использовать вложенную подстановку  результа-
              тов  выполнения  команд.  Если подстановка лежит внутри
              двойных кавычек ("...`...`..."), то символ \, использу-
              емый в ней для экранирования двойной кавычки (\"),  бу-
              дет удален; в противном случае он будет оставлен.

              Если символ \ используется для  экранирования  перевода
              строки,  то удаляются оба символа (см. ниже Экранирова-
              ние). Символ \, экранирующий знак доллара  (\$),  также
              удаляется.  Отметим, что в данном случае экранировать $
              не нужно.

              Другие вхождения символов \ остаются без изменений.

           Подстановка параметров
              В рамках данной статьи термин параметр имеет нетрадици-
              онную трактовку. Различают два типа параметров: позици-
              онные и ключевые.

              Если параметр обозначен цифрой, он  является  позицион-
              ным. Значения позиционным параметрам присваиваются  при
              вызове shell-процедур и функций и посредством оператора
              set (параметр 0 - имя процедуры, параметры 1,  2,...
              аргументы). Значения параметров, обозначаемых одним  из
              символов *, @, #, ?, -, $, !, автоматически  устанавли-
              ваются shell'ом.

              Ключевые параметры (переменные)  обозначаются  именами.
              Значения могут присваиваться им привычным способом:

                   имя=значение [имя=значение] ...

              Все значения трактуются как текстовые. Генерация имен в
              значениях не производится.  Не  допускаются  одинаковые
              имена для переменных и функций.

              Знак $ используется для подстановки  значений  парамет-
              ров. Различают следующие виды подстановки:

              ${параметр}
                   Подставляется значение параметра, если оно опреде-
                   лено. Скобки используются, только если за парамет-
                   ром следуют буква, цифра или знак подчеркивания, и
                   их нужно отделить от имени параметра. Вместо пара-
                   метров * и @ подставляются все  позиционные  пара-
                   метры, начиная с $1, разделенные пробелами.

              ${параметр:-слово}
                   Будем говорить, что параметр пуст, если его значе-
                   ние не определено или  является  пустой  цепочкой.
                   При данном способе подстановки  если  параметр  не
                   пуст, подставляется его значение; в противном слу-
                   чае подставляется слово.

              ${параметр:=слово}
                   Если параметр пуст, ему присваивается слово; после
                   этого подставляется значение параметра. Таким спо-
                   собом нельзя изменять значения  позиционных  пара-
                   метров.

              ${параметр:?слово}
                   Если параметр не пуст, подставляется его значение;
                   в противном случае в стандартный протокол выдается
                   сообщение "параметр:слово"  и  выполнение  shell'а
                   завершается. Если слово опущено, то выдается сооб-
                   щение "параметр:parameter null or not set".

              ${параметр:+слово}
                   Если параметр не пуст, подставляется слово; в про-
                   тивном случае не подставляется ничего.

              При подстановке слово  интерпретируется  только  тогда,
              когда оно нужно для подстановки.  В  следующем  примере
              команда pwd будет выполнена, только если  переменная  d
              пуста:

                   echo  ${d:-`pwd`}

              Значения следующих параметров, так же как * и @,  авто-
              матически устанавливаются shell'ом:

              #    Количество позиционных параметров (десятичное).

              -    Флаги, указанные при запуске shell'а или посредст-
                   вом команды set.

              ?    Десятичное значение, возвращенное предыдущей  син-
                   хронно выполненной командой

              $    Идентификатор процесса, в рамках которого выполня-
                   ется shell.

              !    Идентификатор  последнего  асинхронно  запущенного
                   процесса.

              Напомним: чтобы получить значения этих переменных,  пе-
              ред ними нужно поставить знак $.

              Shell'ом используются следующие переменные:

              HOME
                   Подразумеваемый аргумент команды cd(1) -  основной
                   каталог.

              PATH Список имен каталогов для поиска команд (см.  ниже
                   Выполнение).  В дальнейшем подобные списки называ-
                   ются списками поиска. Элементы списка  разделяются
                   двоеточием.  Пустой элемент означает текущий ката-
                   лог.

              CDPATH
                   Список поиска для команды cd.

              MAIL Имя файла, куда будет помещаться почта; если пере-
                   менная MAILPATH не определена,  shell  информирует
                   пользователя о поступлении почты в указанный файл.

              MAILCHECK
                   Интервал  между  проверками  поступления  почты  в
                   файл, указанный переменными MAIL или MAILPATH.  По
                   умолчанию интервал составляет 600 секунд  (10  ми-
                   нут). При установлении значения 0  проверка  будет
                   производиться перед каждым выводом приглашения.

              MAILPATH
                   Список имен файлов, разделенных  двоеточием.  Если
                   переменная определена, shell информирует пользова-
                   теля о поступлении почты  в  каждый  из  указанных
                   файлов.  После  имени  файла  может  быть  указано
                   (вслед за знаком %) сообщение, которое будет выво-
                   диться при изменении времени модификации указанно-
                   го файла (сообщение по умолчанию "You have mail").

              PS1  Основное приглашение (по умолчанию "$ ").

              PS2  Вспомогательное приглашение (по умолчанию "> ").

              IFS  Цепочка символов, являющихся разделителями  в  ко-
                   мандной строке (по умолчанию это пробел, табуляция
                   и перевод строки).

              SHACCT
                   Если значением этой переменной является имя файла,
                   доступного для записи пользователем,  shell  будет
                   помещать в него сведения о каждой  выполняемой  им
                   процедуре. Для анализа сведений могут быть  приме-
                   нены   такие   программы,   как    acctcom(1)    и
                   acctcms(1M).

              SHELL
                   При запуске shell просматривает окружение (см. ни-
                   же Окружение) в поисках этой переменной. Если  она
                   определена  и файловая часть ее значения есть rsh,
                   shell становится ограниченным [см. rsh(1)].

              Для переменных PATH, PS1, PS2, MAILCHECK и IFS  имеются
              подразумеваемые значения. Значения  переменных  HOME  и
              MAIL устанавливаются командой login(1).

           Интерпретация пробелов
              После подстановки параметров и  результатов  выполнения
              команд полученная строка просматривается в поисках раз-
              делителей (которые  определяются  значением  переменной
              IFS) и расщепляется на аргументы. Явные пустые аргумен-
              ты ("" или '') сохраняются.  Неявные  пустые  аргументы
              (полученные в результате подстановки пустых параметров)
              удаляются.

           Генерация имен файлов
              После всех подстановок, прежде чем команда  начнет  вы-
              полняться, в каждом составляющем ее слове ищутся симво-
              лы  *,  ?,  и [. Если находится хотя бы один из них, то
              это слово рассматривается как шаблон имен файлов и  за-
              меняется именами файлов, удовлетворяющих данному шабло-
              ну  (в  алфавитном  порядке). Если ни одно имя файла не
              удовлетворяет шаблону, слово остается неизменным.  Сим-
              вол . в начале имени файла или непосредственно после /,
              так же как и сам символ /, должны быть заданы в шаблоне
              явно. Трактовка символов *, ? и [:

              *    Сопоставляется с произвольной цепочкой символов, в
                   том числе с пустой.

              ?    Сопоставляется с произвольным символом.

              [...] Сопоставляется с любым из перечисленных в скобках
                    символов. Пара символов,  разделенных  знаком  -,
                    обозначает отрезок алфавита, включающий сами ука-
                    занные  символы.  Если  сразу  вслед за [ идет !,
                    шаблону удовлетворяет любой символ,  не  перечис-
                    ленный в скобках.

           Экранирование
              Следующие символы трактуются shell'ом по-особому;  если
              эти символы не экранированы, они завершают предшествую-
              щее им слово:

                   ;  &  ( )  |  ^  <  >  пробел  табуляция  перевод_строки

              Символы *, ?, [, ]  также  играют  для  shell'а  особую
              роль, однако разделителями слов на являются.

              Каждый из перечисленных выше символов может быть  экра-
              нирован, то есть представлять самого себя,  если  перед
              ним стоит \ или он расположен между кавычками  (''  или
              ""). Во время работы shell может экранировать некоторые
              символы для предотвращения использования их в  качестве
              специальных символов. Символ \ используется для экрани-
              рования одиночных символов и удаляется из  слова  перед
              выполнением команды. Пара символов \перевод_строки уда-
              ляется из слова перед подстановкой параметров и резуль-
              татов выполнения команд.

              Все символы,  заключенные  между  одинарными  кавычками
              (''), представляют самих себя (кроме  одинарной  кавыч-
              ки). Символ \ между парой одинарных  кавычек  не  имеет
              специального значения. Одинарная кавычка может  экрани-
              роваться парой двойных кавычек (пример: "'").

              Между  двойными  кавычками ("") выполняются подстановки
              параметров и команд и результаты подстановок  экраниру-
              ются от интерпретации пробелов и генерации имен файлов.
              Если  $* стоит между двойными кавычками, то позиционные
              параметры подставляются,  экранируются,  и  разделяются
              экранированными  пробелами,  что  эквивалентно  "$1  $2
              ...". Если же внутри  двойных кавычек стоит $@, то  по-
              зиционные параметры подставляются, экранируются, и раз-
              деляются  неэкранированными пробелами, что эквивалентно
              "$1" "$2" ... . Символы \, `, " и $ могут экранировать-
              ся предшествующим  символом  \.  Пара  символов  \пере-
              вод_строки  удаляется из слова перед подстановкой пара-
              метров и результатов выполнения команд. Если  символ  \
              стоит перед символом, отличным от \, `, ", $ и от пере-
              вода строки, то он сам экранируется shell'ом.

           Приглашение
              В интерактивном режиме перед вводом команды shell выда-
              ет основное приглашение, $PS1. Если нажата клавиша  пе-
              ревод_строки, но для завершения команды требуется даль-
              нейший  ввод,  выводится  вспомогательное  приглашение,
              $PS2.

           Ввод/вывод
              Перед тем, как команда будет выполнена, ее ввод и вывод
              могут быть переназначены, для чего используется  специ-
              альная нотация,  интерпретируемая  shell'ом.  Описанные
              ниже конструкции могут быть использованы в любом  месте
              простой команды, могут предшествовать команде  или  за-
              вершать ее и не передаются в качестве аргументов коман-
              ды. Подстановки параметров и команд производятся до ис-
              пользования слов или цифр:

              <слово
                   Использовать файл  слово  для  стандартного  ввода
                   (дескриптор файла 0).

              >слово
                   Использовать файл слово  для  стандартного  вывода
                   (дескриптор файла 1). Если файла нет, он  создает-
                   ся; если есть, он опустошается.

              >>слово
                   Использовать файл слово для  стандартного  вывода.
                   Если файл существует, то выводимая информация  до-
                   бавляется в конец (то  есть  сначала  производится
                   поиск конца файла); в противном случае файл созда-
                   ется.

              <<[-]слово
                   Читается информация со стандартного ввода, пока не
                   встретится строка, совпадающая со словом, или  ко-
                   нец файла. Если после << стоит -,  то  сначала  из
                   слова, а затем, по мере чтения, из исходных  строк
                   удаляются начальные символы табуляции, после  чего
                   проверяется совпадение строки со словом. Если  ка-
                   кой-либо из символов  слова  экранирован,  никакой
                   другой обработки исходной информации  не  произво-
                   дится; в противном случае делается еще следующее:
                   1. Выполняется подстановка параметров и команд.
                   2. Пара символов \перевод_строки игнорируется.
                   3. Для экранирования символов \, $,  `  нужно  ис-
                      пользовать \.
                   Результат описанных выше действий становится стан-
                   дартным вводом команды.

              <&цифра
                   Производить стандартный ввод из файла,  ассоцииро-
                   ванного с дескриптором цифра.

              >&цифра
                   Производить стандартный вывод в  файл,  ассоцииро-
                   ванный с дескриптором цифра.

              <&-  Стандартный ввод команды закрыт.

              >&-  Стандартный вывод команды закрыт.

              Если любой из этих конструкций предшествует цифра,  она
              определяет дескриптор (вместо подразумеваемых  дескрип-
              торов 0 или 1), который будет  ассоциирован  с  файлом,
              указанным в конструкции. Например, строка

                   ...  2>&1

              ассоциирует дескриптор 2 (стандартный протокол) с  фай-
              лом, связанным в данный момент с дескриптором 1.

              Важен порядок переназначения: shell производит переназ-
              начение слева направо. Так, строка

                   ...  1>f  2>&1

              сначала  ассоциирует  дескриптор  1 с файлом f, а затем
              дескриптор 2 с тем же файлом. Если изменить порядок пе-
              реназначения, стандартный протокол  будет  назначен  на
              терминал  (если туда был назначен стандартный вывод), а
              затем стандартный вывод будет переназначен в файл f.

              Если команда состоит из нескольких простых команд,  пе-
              реназначение для всей команды будет выполнено перед пе-
              реназначениями для простых команд. Таким образом, shell
              выполняет переназначения сначала для всего списка,  за-
              тем для каждого входящего в него конвейера,  затем  для
              каждой команды конвейера, затем для каждого  списка  из
              каждой команды.

              Если команда заканчивается  знаком  &,  то  стандартный
              ввод команды переназначается на пустой файл  /dev/null.
              В противном случае окружение для выполнения команды со-
              держит дескрипторы файлов запустившего ее shell'а,  мо-
              дифицированные спецификациями ввода/вывода.

           Окружение
              Окружение [см. environ(5)] - это набор пар (имя, значе-
              ние), который передается выполняемой программе так  же,
              как и обычный список аргументов. Shell  взаимодействует
              с окружением несколькими способами. При  запуске  shell
              просматривает окружение и создает переменную  (ключевой
              параметр) для каждого указанного имени, придавая ей со-
              ответствующее значение. Если изменить  значение  какой
              либо переменной или создать новую, это не окажет  ника-
              кого влияния на окружение, если не  будет  использована
              команда export для увязывания переменной shell'а с  ок-
              ружением (см. также set -a). Переменную  можно  удалить
              из окружения командой unset. Таким  образом,  окружение
              каждой  команды  формируется  из  всех   унаследованных
              shell'ом пар (имя, значение), минус пары, удаленные ко-
              мандой unset, плюс все  модифицированные  и  измененные
              пары, указанные в команде export.

              Окружение простой команды  может  быть  модифицировано,
              если указать перед командой одно или несколько присваи-
              ваний переменным. Так, строки

                   TERM=vt100 команда                      и
                   (export TERM; TERM=vt100; команда)

              эквивалентны, по крайней мере с точки зрения  окружения
              команды.

              Если установлен флаг -k, то все переменные,  получившие
              значение в командой строке, помещаются в окружение  ко-
              манды, даже если они записаны после команды. В  следую-
              щем примере сначала будет выведено a=b c, а затем c:

                   echo a=b c
                   set -k
                   echo a=b c

           Сигналы
              Сигналы прерывания и выхода игнорируются, если  команда
              была запущена асинхронно; в  противном  случае  сигналы
              обрабатываются так же, как в родительском процессе,  за
              исключением сигнала 11 (см. ниже команду trap).

           Выполнение
              Перед выполнением каждой команды производятся все  опи-
              санные выше действия (подстановки, переназначение  вво-
              да/вывода и др.). Если имя команды совпадает  с  именем
              одной из специальных команд,  перечисленных  ниже,  она
              выполняется в рамках текущего процесса. Так же выполня-
              ются и  определенные  пользователем  функции  (обратите
              внимание, как выполнение функций отличается от выполне-
              ния процедур shell'а). Позиционные  параметры  $1,  $2,
              ... получают значения аргументов функции. Если имя  ко-
              манды не совпадает ни с именем специальной команды,  ни
              с именем функции, то порождается новый процесс  и  осу-
              ществляется попытка выполнить  указанную  команду,  ис-
              пользуя системный вызов exec(2).

              Переменная  shell'а PATH определяет список каталогов, в
              которых ищется команда. По умолчанию список поиска име-
              ет вид

                   :/bin:/usr/bin

              то  есть  поиск выполняется сначала в текущем каталоге,
              поскольку список поиска начинается с двоеточия, затем в
              каталоге /bin и, наконец, в /usr/bin. Если имя  команды
              содержит  символ /, значение PATH не используется. Если
              файл имеет право на выполнение, но не  является  файлом
              типа a.out(4), то он рассматривается как файл, содержа-
              щий  команды на языке shell (то есть как shell-процеду-
              ра). Для их чтения порождается  новый  shell.  Команды,
              заключенные   в  скобки,  также  выполняются  отдельным
              shell'ом.

              Положение найденной команды запоминается shell'ом (что-
              бы избежать в дальнейшем излишних вызовов  exec).  Если
              команда была найдена в каталоге, заданном  относительно
              текущего, то ее местоположение должно быть  переопреде-
              лено при изменении текущего  каталога.  Shell  забывает
              все запомненные им прежде местоположения команд при из-
              менении переменной PATH или при выполнении команды hash
              -r (см. ниже).

           Специальные команды
              Если не оговорено противное, команды выводят результаты
              в файл с дескриптором 1.

              :    Пустая команда. Возвращает нулевой код завершения.

              .  файл
                   Shell читает и выполняет команды из  файла,  затем
                   возобновляется чтение со стандартного  ввода;  при
                   поиске  файла  используется  значение   переменной
                   PATH.

              break  [n]
                   Выйти из внутреннего for  или  while  цикла;  если
                   указано n, то выйти из n внутренних циклов.

              continue  [n]
                   Перейти к следующей итерации внутреннего  for  или
                   while цикла; если указано n, то перейти к  следую-
                   щей итерации n-ого цикла.

              cd  [каталог]
                   Сделать  текущим заданный каталог. Если каталог не
                   указан, используется значение переменной HOME. Пе-
                   ременная CDPATH определяет список поиска каталога.
                   По умолчанию этот список пуст (то есть поиск  про-
                   изводится только в текущем каталоге). Если каталог
                   начинается с символа /, список поиска не использу-
                   ется.

              echo  [аргумент ...]
                   Выдать аргументы на стандартный вывод, разделяя их
                   пробелами [см. также echo(1)].

              eval  [аргумент ...]
                   Выполнить команду, заданную аргументами eval.

              exec  [аргумент ...]
                   Сменить программу процесса: в рамках текущего про-
                   цесса команда, заданная аргументами exec, заменяет
                   shell. В качестве аргументов  могут  быть  указаны
                   спецификации ввода/вывода и, если нет никаких дру-
                   гих аргументов, будет лишь переназначен ввод/вывод
                   текущего shell'а.

              exit  [код_завершения]
                   Завершить выполнение shell'а  с  указанным  кодом.
                   При отсутствии аргумента код завершения  определя-
                   ется последней выполненной командой. Чтение симво-
                   ла  конца  файла  также  приводит   к   завершению
                   shell'а.

              export  [переменная ...]
                   Заданные переменные отмечаются для автоматического
                   экспорта в окружение выполняемых команд. Если  ар-
                   гументы не указаны, выводится список всех  экспор-
                   тируемых переменных. Имена функций не  могут  экс-
                   портироваться. Имена переменных,  экспортированных
                   из родительского shell'а, выдаются  только  в  том
                   случае, если они были экспортированы и из текущего
                   shell'а.

              getopts
                   Используется в  shell-процедурах  для  поддержания
                   синтаксических стандартов [см. intro(1)]; разбира-
                   ет позиционные параметры и проверяет  допустимость
                   задания опций [см. getopts(1)].

              hash  [-r] [имя_команды ...]
                   Для каждого из указанных имен_команд  определяется
                   и запоминается маршрут поиска - место в списке по-
                   иска, где удалось найти команду. Опция -r  удаляет
                   все запомненные данные. Если не указан ни один ар-
                   гумент, то выводится информация о запомненных  ко-
                   мандах: hits - количество обращений shell'а к дан-
                   ной команде; cost - об ем работы  для  обнаружения
                   команды в соответствии со списком поиска;  command
                   - полное имя команды. Звездочкой  в  колонке  hits
                   помечаются команды, маршрут поиска  которых  будет
                   перевычисляться после смены текущего каталога [см.
                   cd(1)]; расходы на  перевычисление  учитываются  в
                   колонке cost.

              newgrp  [аргумент ...]
                   Эквивалентно  exec  newgrp   аргумент   ...   [см.
                   newgrp(1)].

              pwd  Выводит имя текущего каталога. [см. pwd(1)].

              read  [переменная ...]
                   Со стандартного ввода читается одна строка  и  де-
                   лится на слова с учетом разделителей,  перечислен-
                   ных в значении переменной IFS (обычно  это  пробел
                   или табуляция); первое слово присваивается  первой
                   переменной, второе - второй и т.д., причем все ос-
                   тавшиеся слова присваиваются последней переменной.
                   Исходная строка имеет продолжение, если в конце ее
                   стоит последовательность \перевод_строки. Символы,
                   отличные от перевода строки, также могут быть  эк-
                   ранированы с помощью \,  который  удаляется  перед
                   присваиванием слов. Возвращается нулевой  код  за-
                   вершения, если только не встретился конец файла.

              readonly  [переменная ...]
                   Указанные  переменные  отмечаются  как   доступные
                   только на чтение.  Присваивания  таким  переменным
                   трактуются как ошибки. Если аргументы не  указаны,
                   то выводится информация обо всех переменных,  дос-
                   тупных только на чтение.

              return  [код_завершения]
                   Выйти из функции с указанным кодом_завершения. Ес-
                   ли аргумент опущен, то код завершения  наследуется
                   от последней выполненной команды.

              set  [-a] [-e] [-f] [-h] [-k] [-n] [-t] [-u] [-v] [-x] [--] [аргумент ...]]
                   -a Экспортировать переменные,  которые  изменяются
                      или создаются, в окружение.

                   -e Выйти из shell'а, если какая-либо команда  воз-
                      вращает ненулевой код завершения.

                   -f Запретить генерацию имен файлов.

                   -h Определить и запомнить местоположение всех  ко-
                      манд, входящих в тело функции, во время ее  оп-
                      ределения, а не во время выполнения.

                   -k Поместить  в  окружение команды все переменные,
                      получившие значение в командной  строке,  а  не
                      только те, что предшествуют имени команды.

                   -n Читать команды, но не выполнять их.

                   -t Выйти из shell'а после ввода и выполнения одной
                      команды.

                   -u Рассматривать подстановку параметров, не  полу-
                      чивших значений, как ошибку.

                   -v Выводить исходные для shell'а строки сразу пос-
                      ле их ввода.

                   -x Выводить команды и их аргументы непосредственно
                      перед выполнением.

                   -- Не изменяет  флаги.  Полезно  использовать  для
                      присваивания позиционному параметру $1 значения
                      -:

                         set  --  -

                   При указании + вместо - перечисленные выше  режимы
                   выключаются. Описанные флаги могут также использо-
                   ваться при запуске shell'а. Набор  текущих  флагов
                   есть значение переменной $-. Следующие за  флагами
                   аргументы будут присвоены  позиционным  параметрам
                   $1, $2 и т.д. Если не заданы ни флаги, ни аргумен-
                   ты, выводятся значения всех переменных.

              shift  [n]
                   Позиционные параметры, начиная с (n+1)-го,  переи-
                   меновываются в $1 и т.д. По умолчанию n=1.

              test Вычислить условное выражение [см. test(1)].

              times Вывести суммарные времена пользователя и системы,
                    затраченные  на  выполнение процессов, запущенных
                    данным shell'ом.

              trap  [имя_команды] [n] ...
                   Команда с указанным именем будет прочитана  и  вы-
                   полнена, когда shell получит сигнал(ы) n. Заметим,
                   что имя_команды обрабатывается при установке  пре-
                   рывания и при получении сигнала. Команды  выполня-
                   ются в порядке номеров сигналов. Нельзя установить
                   обработку  прерывания  по  сигналу,  игнорируемому
                   данным shell'ом. Попытка установить обработку пре-
                   рывания по сигналу 11 (выход за допустимые границы
                   памяти) приводит к ошибке. Если имя_команды опуще-
                   но, то для  прерываний  с  указанными  номерами  n
                   восстанавливается  первоначальная  реакция.   Если
                   имя_команды есть пустая строка, то этот сигнал бу-
                   дет игнорироваться shell'ом и вызываемыми им прог-
                   раммами. Если n равно 0, то указанная команда  вы-
                   полняется при выходе из shell'а. Trap без аргумен-
                   тов выводит список команд, связанных с каждым сиг-
                   налом.

              type  [имя ...]
                   Для каждого имени указывается, как оно  будет  ин-
                   терпретироваться при использовании в качестве име-
                   ни команды.

              ulimit  [размер_в_блоках]
                   Установить  максимальный размер_в_блоках (по 1 Кб)
                   тех файлов, в которые пишут данный shell и его по-
                   томки (читать можно  файлы  любого  размера)  [см.
                   ulimit(1)].  Если размер не указан, выдается теку-
                   щий лимит.  Каждый  пользователь  может  уменьшить
                   собственный лимит, но только суперпользователь мо-
                   жет его увеличить.

              umask  [nnn]
                   Пользовательская маска создания файлов  становится
                   равной nnn (восьмеричное) [см. umask(1)]. Если nnn
                   опущено, выдается текущее значение маски.

              unset  [имя ...]
                   Для каждого указанного имени удалить соответствую-
                   щую переменную или функцию. Переменные PATH,  PS1,
                   PS2, MAILCHECK и IFS не могут быть удалены.

              wait  [идентификатор_процесса]
                   Ждать завершения указанного  фонового  процесса  и
                   вывести код его завершения. При  отсутствии  аргу-
                   мента ждать завершения всех активных фоновых  про-
                   цессов. В этом случае код завершения  будет  нуле-
                   вым [см. wait(1)].

           Запуск shell'а
              Если shell запускается  посредством  системного  вызова
              exec(2) и первым символом нулевого  аргумента  является
              -,  сначала  читаются  и  выполняются  команды из /etc/
              profile и $HOME/.profile, если  эти  файлы  существуют.
              Затем,  как  и  в  случае  запуска  shell'а посредством
              /bin/sh, команды выполняются описываемым далее образом.
              Перечисленные  ниже  флаги  интерпретируются   shell'ом
              только  при запуске. Обратим внимание, что если не ука-
              заны флаги -c и -s, то первый аргумент  рассматривается
              как  имя  файла, содержащего команды, а остальные аргу-
              менты передаются этому командному файлу в качестве  по-
              зиционных параметров.

              -c цепочка_символов
                   Если задан флаг -c, команды берутся  из  цепочки_-
                   символов.

              -s   Если задан флаг -s или если аргументов больше нет,
                   команды читаются со стандартного ввода. Все остав-
                   шиеся аргументы  рассматриваются  как  позиционные
                   параметры. Вывод shell'а  (кроме  специальных  ко-
                   манд) направляется в файл с дескриптором 2  (стан-
                   дартный протокол).

              -i   Если задан флаг -i или если ввод и  вывод  shell'а
                   ассоциированы с терминалом,  shell  выполняется  в
                   интерактивном режиме. В этом случае сигнал  завер-
                   шения (0) игнорируется (то есть команда kill 0  не
                   приведет  к   завершению   работы   интерактивного
                   shell'а), а сигнал прерывания (2)  перехватывается
                   и игнорируется (поэтому выполнение системной функ-
                   ции wait(2) может быть прервано). В  любом  случае
                   сигнал выхода (3) игнорируется.

              -r   Если задан флаг -r, то shell запускается как огра-
                   ниченный [см. rsh(1)].

              Описание остальных флагов и аргументов см. выше в  опи-
              сании команды set.

      ФАЙЛЫ
              /etc/profile
              $HOME/.profile
              /tmp/sh*
              /dev/null

      СМ. ТАКЖЕ
              acctcom(1), cd(1), echo(1),  env(1),  getopts(1),  int-
              ro(1), login(1), newgrp(1),  pwd(1),  rsh(1),  test(1),
              umask(1), wait(1).
              dup(2),  exec(2),  fork(2),  pipe(2),  signal(2),  uli-
              mit(2), umask(2), wait(2), a.out(4), profile(4),  envi-
              ron(5) в Справочнике программиста.
              acctcms(1M) в Справочнике администратора.

      КОДЫ ЗАВЕРШЕНИЯ
              При обнаружении shell'ом ошибок, например  синтаксичес-
              ких, возвращается ненулевой  код  завершения;  в  таком
              случае выполнение shell-процедуры прекращается.  В  ос-
              тальных случаях shell возвращает код завершения послед-
              ней выполненной команды (см. также выше команду exit).

      ОГРАНИЧЕНИЯ
              В  словах, используемых в качестве имен файлов  при пе-
              реназначении ввода/вывода,  не  производится  генерация
              имен файлов (см. выше Генерация имен файлов). Например,
              команда

                   cat  f1 > a*

              создаст файл с именем a*.

              Так как команды конвейера выполняются как самостоятель-
              ные процессы, то переменные, установленные в конвейере,
              не оказывают влияния на родительский shell.

              Если Вы получили сообщение об ошибке: "cannot fork, too
              many processes", попытайтесь выполнить команду  wait(1)
              для чистки фоновых процессов. Если это не поможет,  то,
              значит, либо системная таблица процессов и в самом деле
              переполнена, либо у Вас слишком много приоритетных про-
              цессов. (Имеется ограничение на число процессов,  ассо-
              циированных с каждым пользователем, и  на  общее  число
              процессов.)

      СЮРПРИЗЫ
              При выполнении  команд запоминается их местонахождение.
              Поэтому при создании команды с тем же именем, но  нахо-
              дящейся в другом каталоге, все равно будет  выполняться
              старая команда (если вызов происходит по простому  име-
              ни).  Для  исправления ситуации воспользуйтесь командой
              hash -r.

              После переименования текущего или вышележащего каталога
              команда pwd может давать неверную информацию. Для  исп-
              равления ситуации воспользуйтесь командой cd  с  полным
              именем каталога.

              Не описанный в основном тексте символ ^  для  совмести-
              мости со старыми версиями является синонимом |, то есть
              служит для организации конвейеров.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк