Встроенная команда Set
Эта встроенная команда настолько сложна, что заслуживает отдельного раздела. set позволяет изменять значения параметров оболочки и задавать позиционные параметры либо отображать имена и значения переменных оболочки.
-
set -
set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [argument ...] set [+abefhkmnptuvxBCEHPT] [+o option-name] [--] [-] [argument ...] set -o set +o
Если параметры или аргументы не указаны,
setотображает имена и значения всех переменных и функций оболочки, отсортированные согласно текущей локали, в формате, который можно повторно использовать как входные данные для задания или сброса текущих переменных. Переменные только для чтения сбросить нельзя. В режиме POSIX отображаются только переменные оболочки.Если указаны параметры, они устанавливают или снимают атрибуты оболочки. Любые аргументы, оставшиеся после обработки параметров, заменяют позиционные параметры.
Указанные параметры имеют следующие значения:
-a-
Каждой созданной или изменённой переменной либо функции присваивается атрибут экспорта, и она помечается для передачи в окружение последующих команд.
-b-
Заставляет немедленно сообщать о состоянии завершившихся фоновых заданий, а не перед выводом следующего основного приглашения или, при некоторых обстоятельствах, при завершении команды переднего плана. Действует только при включённом управлении заданиями.
-e-
Немедленно завершает работу, если конвейер (см. раздел Конвейеры), который может состоять из одной простой команды (см. раздел Простые команды), списка (см. раздел Списки команд) или составной команды (см. раздел Составные команды), возвращает ненулевой статус. Оболочка не завершает работу, если команда, завершившаяся с ошибкой, является частью списка команд, непосредственно следующего за зарезервированным словом
whileилиuntil, частью условия в оператореif, частью любой команды, выполненной в списке&&или||, кроме команды после последнего&&или||, любой командой конвейера, кроме последней (в зависимости от состояния параметра оболочкиpipefail), либо если статус возврата команды инвертируется с помощью!. Если составная команда, отличная от подоболочки, возвращает ненулевой статус из-за сбоя команды в период игнорирования -e, оболочка не завершает работу. Если задан обработчикERR, он выполняется перед завершением работы оболочки.Этот параметр применяется отдельно к окружению оболочки и каждой подоболочки (см. раздел Среда выполнения команд) и может привести к завершению подоболочек до выполнения всех команд в них.
Если составная команда или функция оболочки выполняется в контексте, где -e игнорируется, настройка -e не повлияет ни на одну из команд, выполненных внутри составной команды или тела функции, даже если -e задан и команда возвращает статус ошибки. Если составная команда или функция оболочки задаёт -e во время выполнения в контексте, где -e игнорируется, эта настройка не вступит в силу до завершения составной команды или команды, содержащей вызов функции.
-f-
Отключает раскрытие имён файлов (подстановку шаблонов).
-h-
Находит команды и сохраняет их в хеш-таблице по мере поиска для выполнения. Этот параметр включён по умолчанию.
-k-
Все аргументы в форме операторов присваивания помещаются в окружение команды, а не только те, которые указаны перед именем команды.
-m-
Управление заданиями включено (см. раздел Управление заданиями). Все процессы запускаются в отдельных группах процессов. Когда фоновое задание завершается, оболочка выводит строку с его статусом завершения.
-n-
Читает команды, но не выполняет их. Это можно использовать для проверки сценария на наличие синтаксических ошибок. Интерактивные оболочки игнорируют этот параметр.
-o option-name-
Задаёт параметр, соответствующий option-name. Если -o указан без option-name,
setвыводит текущие настройки параметров оболочки. Если +o указан без option-name,setвыводит в стандартный вывод последовательность командsetдля восстановления текущих настроек параметров. Допустимые имена параметров:allexport-
То же, что и
-a. braceexpand-
То же, что и
-B. emacs-
Использует интерфейс редактирования строк в стиле
emacs(см. раздел Редактирование командной строки). Это также влияет на интерфейс редактирования, используемый дляread -e. errexit-
То же, что и
-e. errtrace-
То же, что и
-E. functrace-
То же, что и
-T. hashall-
То же, что и
-h. histexpand-
То же, что и
-H. history-
Включает историю команд, описанную в разделе Возможности истории Bash. В интерактивных оболочках этот параметр включён по умолчанию.
ignoreeof-
Интерактивная оболочка не завершает работу при чтении EOF.
keyword-
То же, что и
-k. monitor-
То же, что и
-m. noclobber-
То же, что и
-C. noexec-
То же, что и
-n. noglob-
То же, что и
-f. nolog-
В настоящее время игнорируется.
notify-
То же, что и
-b. nounset-
То же, что и
-u. onecmd-
То же, что и
-t. physical-
То же, что и
-P. pipefail-
Если этот параметр задан, значением возврата конвейера будет значение последней (самой правой) команды, завершившейся с ненулевым статусом, или ноль, если все команды конвейера завершились успешно. По умолчанию этот параметр отключён.
posix-
Включает режим POSIX; изменяет поведение Bash там, где стандартное поведение отличается от стандарта POSIX, чтобы оно соответствовало стандарту (см. раздел Bash и POSIX). Это предназначено для того, чтобы Bash вёл себя как строгое надмножество этого стандарта.
privileged-
То же, что и
-p. verbose-
То же, что и
-v. vi-
Использует интерфейс редактирования строк в стиле
vi. Это также влияет на интерфейс редактирования, используемый дляread -e. xtraceТо же, что и
-x.
-p-
Включает привилегированный режим. В этом режиме файлы
$BASH_ENVи$ENVне обрабатываются, функции оболочки не наследуются из окружения, а переменныеSHELLOPTS,BASHOPTS,CDPATHиGLOBIGNORE, если они присутствуют в окружении, игнорируются. Если оболочка запущена с эффективным идентификатором пользователя (группы), не совпадающим с реальным идентификатором пользователя (группы), и параметр -p не указан, выполняются эти действия, а эффективный идентификатор пользователя устанавливается равным реальному идентификатору пользователя. Если при запуске указан параметр -p, эффективный идентификатор пользователя не сбрасывается. Отключение этого параметра приводит к установке эффективных идентификаторов пользователя и группы в значения реальных идентификаторов пользователя и группы. -r-
Включает режим ограниченной оболочки (см. раздел Ограниченная оболочка). После включения этот параметр нельзя отключить.
-t-
Завершает работу после чтения и выполнения одной команды.
-u-
Считает ошибкой неустановленные переменные и параметры, кроме специальных параметров ‘@’ или ‘*’ и переменных массивов с индексом ‘@’ или ‘*’, при выполнении раскрытия параметров. Сообщение об ошибке выводится в стандартный поток ошибок, а неинтерактивная оболочка завершает работу.
-v-
Выводит строки ввода оболочки в стандартный поток ошибок по мере их чтения.
-x-
Выводит трассировку простых команд, команд
for, командcase, командselectи арифметических командfor, а также их аргументов или соответствующих списков слов в стандартный поток ошибок после раскрытия и перед выполнением. Оболочка выводит раскрытое значение переменнойPS4перед командой и её раскрытыми аргументами. -B-
Оболочка выполняет раскрытие скобок (см. раздел Раскрытие скобок). Этот параметр включён по умолчанию.
-C-
Запрещает перезапись существующих файлов при перенаправлении вывода с помощью ‘>’, ‘>&’ и ‘<>’. Использование оператора перенаправления ‘>|’ вместо ‘>’ отменяет это ограничение и принудительно создаёт выходной файл.
-E-
Если этот параметр задан, любой обработчик
ERRнаследуется функциями оболочки, подстановками команд и командами, выполняемыми в окружении подоболочки. В таких случаях обработчикERRобычно не наследуется. -H-
Включает подстановку истории в стиле ‘!’ (см. раздел Раскрытие истории). В интерактивных оболочках этот параметр включён по умолчанию.
-P-
Если этот параметр задан, Bash не разрешает символические ссылки при выполнении таких команд, как
cd, изменяющих текущий каталог. Вместо этого используется физическая структура каталогов. По умолчанию Bash следует логической цепочке каталогов при выполнении команд, изменяющих текущий каталог.Например, если /usr/sys является символической ссылкой на /usr/local/sys, то:
$ cd /usr/sys; echo $PWD /usr/sys $ cd ..; pwd /usr
Если включён
set -P, то:$ cd /usr/sys; echo $PWD /usr/local/sys $ cd ..; pwd /usr/local
-T-
Если этот параметр задан, любые обработчики
DEBUGиRETURNнаследуются функциями оболочки, подстановками команд и командами, выполняемыми в окружении подоболочки. В таких случаях обработчикиDEBUGиRETURNобычно не наследуются. ---
Если за этим параметром не следуют аргументы, позиционные параметры сбрасываются. В противном случае позиционные параметры устанавливаются в значения аргументов, даже если некоторые из них начинаются с ‘-’.
-Обозначает конец параметров и присваивает все оставшиеся аргументы позиционным параметрам. Параметры -x и -v отключаются. Если аргументов нет, позиционные параметры остаются без изменений.
Использование ‘+’ вместо ‘-’ отключает эти параметры. Параметры также можно использовать при запуске оболочки. Текущий набор параметров можно найти в
$-.Оставшиеся N аргументов являются позиционными параметрами и по порядку присваиваются
$1,$2, …$N. Специальному параметру#присваивается значение N.Статус возврата всегда равен нулю, если не указан недопустимый параметр.
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html