Spec-Zone.ru › Bash

Встроенные команды оболочки Bourne

Следующие встроенные команды оболочки унаследованы от оболочки Bourne. Эти команды реализованы в соответствии со стандартом POSIX.

: (a colon)
: [arguments]

Не выполняет никаких действий, кроме раскрытия arguments и выполнения перенаправлений. Код возврата равен нулю.

. (a period)
. [-p path] filename [arguments]

Команда . читает и выполняет команды из аргумента filename в контексте текущей оболочки.

Если filename не содержит косую черту, . выполняет поиск этого файла. Если указан параметр -p, . рассматривает path как список каталогов, разделённых двоеточиями, в которых следует искать filename; в противном случае . использует каталоги из PATH для поиска filename. Файл filename не обязательно должен быть исполняемым. Если Bash не работает в режиме POSIX, он ищет файл в текущем каталоге, если filename не найден в $PATH, но не ищет в текущем каталоге, если указан параметр -p. Если параметр sourcepath (см. Встроенная команда Shopt) отключён, . не выполняет поиск в PATH.

Если заданы какие-либо arguments, они становятся позиционными параметрами при выполнении filename. В противном случае позиционные параметры остаются неизменными.

Если включён параметр -T, . наследует любую ловушку для DEBUG; если он не включён, любая строка ловушки DEBUG сохраняется и восстанавливается до и после вызова ., а . снимает ловушку DEBUG на время выполнения. Если параметр -T не установлен, а подключаемый файл изменяет ловушку DEBUG, новое значение сохраняется после завершения .. Код возврата — это код завершения последней выполненной команды из filename или ноль, если команды не выполнялись. Если файл filename не найден или не может быть прочитан, код возврата отличен от нуля. Эта встроенная команда эквивалентна source.

break
break [n]

Выход из цикла for, while, until или select. Если задано n, break выполняет выход из n-го внешнего цикла. Значение n должно быть больше или равно 1. Код возврата равен нулю, если только n не больше или не равно 1.

cd
cd [-L] [-@] [directory]
cd -P [-e] [-@] [directory]

Изменяет текущий рабочий каталог на directory. Если directory не задан, в качестве directory используется значение переменной оболочки HOME. Если существует переменная оболочки CDPATH, а directory не начинается с косой черты, cd использует её как путь поиска: cd ищет directory в каждом имени каталога из CDPATH, используя альтернативные имена каталогов из CDPATH, разделённые двоеточием («:»). Пустое имя каталога в CDPATH означает то же, что и текущий каталог.

Параметр -P запрещает переход по символическим ссылкам: символические ссылки разрешаются при обходе directory командой cd и до обработки элемента .. в directory.

По умолчанию или при указании параметра -L символические ссылки в directory разрешаются после того, как cd обработает элемент .. в directory.

Если в directory встречается .., cd обрабатывает его, удаляя непосредственно предшествующий компонент пути вплоть до косой черты или начала directory, и проверяет, остаётся ли обработанная к этому моменту часть directory допустимым именем каталога после удаления компонента пути. Если имя каталога недопустимо, cd возвращает ненулевой код.

Если параметр -e указан вместе с -P, а cd не удаётся определить текущий рабочий каталог после успешной смены каталога, команда возвращает ненулевой код.

В системах, поддерживающих эту возможность, параметр -@ представляет расширенные атрибуты файла в виде каталога.

Если значение directory равно «-», оно преобразуется в $OLDPWD перед попыткой сменить каталог.

Если cd использует непустое имя каталога из CDPATH или если «-» является первым аргументом и смена каталога выполняется успешно, cd выводит абсолютный путь нового рабочего каталога в стандартный вывод.

Если смена каталога выполняется успешно, cd задаёт переменной окружения PWD новое имя каталога, а переменной окружения OLDPWD — значение текущего рабочего каталога до смены.

Код возврата равен нулю, если каталог успешно изменён, и отличен от нуля в противном случае.

continue
continue [n]

continue переходит к следующей итерации внешнего цикла for, while, until или select. Если задано n, Bash возобновляет выполнение n-го внешнего цикла. Значение n должно быть больше или равно 1. Код возврата равен нулю, если только n не больше или не равно 1.

eval
eval [arguments]

Аргументы arguments объединяются в одну команду через пробелы. Затем Bash читает и выполняет эту команду, а её код завершения возвращает как код завершения eval. Если аргументы отсутствуют или все они пусты, код возврата равен нулю.

exec
exec [-cl] [-a name] [command [arguments]]

Если указан command, он заменяет оболочку без создания нового процесса. command не может быть встроенной командой или функцией оболочки. Аргументы arguments становятся аргументами command. Если указан параметр -l, оболочка добавляет дефис в начало нулевого аргумента, передаваемого command. Именно это делает программа login. Параметр -c заставляет выполнить command с пустым окружением. Если указан параметр -a, оболочка передаёт name в качестве нулевого аргумента command.

Если по какой-либо причине выполнить command не удаётся, неинтерактивная оболочка завершает работу, если не включён параметр оболочки execfail. В этом случае она возвращает ненулевой код. Интерактивная оболочка возвращает ненулевой код, если файл не удаётся выполнить. Подоболочка завершается безусловно, если выполнение exec завершается неудачей.

Если command не задан, перенаправления можно использовать для изменения окружения текущей оболочки. Если ошибок перенаправления нет, код возврата равен нулю; в противном случае он отличен от нуля.

exit
exit [n]

Завершает работу оболочки, возвращая родительской оболочке статус n. Если n не задан, кодом завершения становится код последней выполненной команды. Перед завершением оболочки выполняется любая ловушка для EXIT.

export
export [-fn] [-p] [name[=value]]

Помечает каждое имя name для передачи в окружение последующих выполняемых команд. Если указан параметр -f, name обозначает функцию оболочки; в противном случае имена обозначают переменные оболочки.

Параметр -n отменяет экспорт каждого имени: снимает пометку об экспорте. Если имена name не заданы или указан только параметр -p, export выводит в стандартный вывод список имён всех экспортированных переменных. Совместное использование параметров -p и -f выводит экспортированные функции. Параметр -p выводит данные в формате, который можно повторно использовать в качестве входных данных.

export позволяет задать значение переменной одновременно с её экспортом или отменой экспорта, если после имени переменной указать =value. При изменении атрибута экспорта значение переменной устанавливается равным value.

Код возврата равен нулю, если только не указан недопустимый параметр, одно из имён не является допустимым именем переменной оболочки или параметр -f не указан с именем, которое не является функцией оболочки.

false
false

Ничего не делает; возвращает ненулевой код.

getopts
getopts optstring name [arg ...]

getopts используется сценариями оболочки или функциями для разбора позиционных параметров и получения параметров и их аргументов. В optstring содержатся распознаваемые символы параметров; если за символом следует двоеточие, параметр должен иметь аргумент, отделённый от него пробельными символами. Двоеточие («:») и вопросительный знак («?») нельзя использовать в качестве символов параметров.

При каждом вызове getopts помещает следующий параметр в переменную оболочки name, инициализируя name, если она не существует, а индекс следующего обрабатываемого аргумента — в переменную OPTIND. OPTIND инициализируется значением 1 при каждом запуске оболочки или сценария оболочки. Если параметру требуется аргумент, getopts помещает этот аргумент в переменную OPTARG.

Оболочка не сбрасывает OPTIND автоматически; для обработки нового набора параметров эту переменную необходимо сбрасывать вручную между несколькими вызовами getopts в рамках одного запуска оболочки.

При достижении конца списка параметров getopts завершает работу с кодом возврата больше нуля. OPTIND получает индекс первого аргумента, не являющегося параметром, а name получает значение «?».

Обычно getopts разбирает позиционные параметры, но если в качестве значений arg переданы дополнительные аргументы, getopts разбирает их.

getopts может сообщать об ошибках двумя способами. Если первый символ optstring — двоеточие, getopts использует тихий режим сообщения об ошибках. В обычном режиме getopts выводит диагностические сообщения при обнаружении недопустимых параметров или отсутствующих аргументов параметров. Если переменной OPTERR присвоено значение 0, getopts не выводит сообщения об ошибках, даже если первый символ optstring не является двоеточием.

Если getopts обнаруживает недопустимый параметр, она помещает «?» в name и, если режим не тихий, выводит сообщение об ошибке и снимает OPTARG. Если getopts работает в тихом режиме, она присваивает найденный символ параметра переменной OPTARG и не выводит диагностическое сообщение.

Если обязательный аргумент не найден, а getopts не работает в тихом режиме, она присваивает name вопросительный знак («?»), снимает OPTARG и выводит диагностическое сообщение. Если getopts работает в тихом режиме, она присваивает name двоеточие («:»), а OPTARG — найденный символ параметра.

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

hash
hash [-r] [-p filename] [-dt] [name]

При каждом вызове hash запоминает полные имена файлов команд, заданных в качестве аргументов name, чтобы при последующих вызовах их не приходилось искать. Команды находятся путём поиска в каталогах, перечисленных в $PATH. Любое ранее сохранённое имя файла, связанное с name, удаляется. Параметр -p отключает поиск по пути, и hash использует filename в качестве расположения name.

Параметр -r заставляет оболочку забыть все сохранённые расположения. Присваивание значения переменной PATH также очищает все хешированные имена файлов. Параметр -d заставляет оболочку забыть сохранённое расположение каждого name.

Если указан параметр -t, hash выводит полный путь, соответствующий каждому name. Если с параметром -t указано несколько аргументов name, hash выводит каждое name перед соответствующим хешированным полным путём. Параметр -l отображает данные в формате, который можно повторно использовать в качестве входных данных.

Если аргументы не заданы или указан только параметр -l, hash выводит сведения о запомненных командах. Параметры -t, -d и -p (параметры, применяемые к аргументам name) взаимоисключающие. Активным может быть только один из них. Если указано несколько параметров, -t имеет более высокий приоритет, чем -p, а оба они имеют более высокий приоритет, чем -d.

Код возврата равен нулю, если только имя name не найдено или не указан недопустимый параметр.

pwd
pwd [-LP]

Выводит абсолютный путь текущего рабочего каталога. Если указан параметр -P или включён параметр -o physical встроенной команды set (см. Встроенная команда Set), выводимый путь не будет содержать символических ссылок. Если указан параметр -L, выводимый путь может содержать символические ссылки. Код возврата равен нулю, если только при определении имени текущего каталога не возникла ошибка или не указан недопустимый параметр.

readonly
readonly [-aAf] [-p] [name[=value]] ...

Помечает каждое имя name как доступное только для чтения. Значения этих имён нельзя изменить последующим присваиванием или удалением. Если указан параметр -f, каждое имя name обозначает функцию оболочки. Параметр -a означает, что каждое имя name обозначает индексированную переменную-массив; параметр -A означает, что каждое имя name обозначает ассоциативную переменную-массив. Если указаны оба параметра, приоритет имеет -A. Если аргументы name не заданы или указан параметр -p, выводится список всех имён, доступных только для чтения. Другие параметры можно использовать, чтобы ограничить вывод подмножеством таких имён. Параметр -p отображает данные в формате, который можно повторно использовать в качестве входных данных.

readonly позволяет задать значение переменной одновременно с изменением атрибута «только для чтения», если после имени переменной указать =value. При изменении атрибута «только для чтения» значение переменной устанавливается равным value.

Код возврата равен нулю, если только не указан недопустимый параметр, один из аргументов name не является допустимым именем переменной или функции оболочки либо параметр -f не указан с именем, которое не является функцией оболочки.

return
return [n]

Прекращает выполнение функции оболочки или подключённого файла и возвращает вызывающей стороне значение n. Если n не задано, возвращаемое значение — это код завершения последней выполненной команды. Если return выполняется обработчиком ловушки, последней командой, используемой для определения статуса, является команда, выполненная непосредственно перед обработчиком ловушки. Если return выполняется во время ловушки DEBUG, последней командой, используемой для определения статуса, является команда, выполненная обработчиком ловушки непосредственно перед вызовом return.

Когда return используется для завершения выполнения сценария, запущенного с помощью встроенной команды . (source), в качестве кода завершения сценария возвращается либо n, либо код последней команды, выполненной в сценарии. Если задано n, возвращаемое значение — это его младшие 8 битов.

Перед возобновлением выполнения после завершения функции или сценария выполняется любая команда, связанная с ловушкой RETURN.

Код возврата отличен от нуля, если return передано нечисловое значение или команда используется вне функции и не во время выполнения сценария с помощью . или source.

shift
shift [n]

Сдвигает позиционные параметры влево на n позиций: позиционные параметры от n+1 … $# переименовываются в $1 … $#-n. Параметры, представленные числами от $# до $#-n+1, удаляются. Значение n должно быть неотрицательным числом, меньшим или равным $#. Если n не задано, предполагается, что оно равно 1. Если n равно нулю или больше $#, позиционные параметры не изменяются. Код возврата равен нулю, если только n не больше $# или меньше нуля; в противном случае он отличен от нуля.

​test
[
test expr

Вычисляет условное выражение expr и возвращает статус 0 (истина) или 1 (ложь). Каждый оператор и операнд должен быть отдельным аргументом. Выражения составляются из первичных выражений, описанных ниже в разделе Условные выражения Bash. test не принимает параметров и не принимает аргумент --, который означал бы конец списка параметров, даже если игнорирует его. При использовании формы [ последним аргументом команды должен быть ].

Выражения можно объединять с помощью следующих операторов, перечисленных в порядке убывания приоритета. Способ вычисления зависит от количества аргументов; см. ниже. test использует приоритет операторов, если аргументов пять или больше.

! expr

Истина, если expr ложно.

( expr )

Возвращает значение expr. Может использоваться для изменения обычного приоритета операторов.

expr1 -a expr2

Истина, если истинны и expr1, и expr2.

expr1 -o expr2

Истина, если истинно expr1 или expr2.

Встроенные команды test и [ вычисляют условные выражения, используя набор правил, зависящих от количества аргументов.

0 аргументов

Выражение ложно.

1 аргумент

Выражение истинно тогда и только тогда, когда аргумент не пуст.

2 аргумента

Если первый аргумент — «!», выражение истинно тогда и только тогда, когда второй аргумент пуст. Если первый аргумент является одним из унарных условных операторов (см. Условные выражения Bash), выражение истинно, если унарная проверка истинна. Если первый аргумент не является допустимым унарным оператором, выражение ложно.

3 аргумента

Следующие условия проверяются в указанном порядке.

  1. Если второй аргумент является одним из бинарных условных операторов (см. Условные выражения Bash), результатом выражения становится результат бинарной проверки с использованием первого и третьего аргументов в качестве операндов. Операторы «-a» и «-o» считаются бинарными операторами, если аргументов три.
  2. Если первый аргумент — «!», значением является отрицание результата двухаргументной проверки, использующей второй и третий аргументы.
  3. Если первый аргумент в точности равен «(», а третий аргумент в точности равен «)», результатом является одноаргументная проверка второго аргумента.
  4. В противном случае выражение ложно.
4 аргумента

Следующие условия проверяются в указанном порядке.

  1. Если первый аргумент — «!», результатом является отрицание трёхаргументного выражения, составленного из остальных аргументов.
  2. Если первый аргумент в точности равен «(», а четвёртый аргумент в точности равен «)», результатом является двухаргументная проверка второго и третьего аргументов.
  3. В противном случае выражение разбирается и вычисляется согласно приведённым выше правилам приоритета.
5 или более аргументов

Выражение разбирается и вычисляется согласно приведённым выше правилам приоритета.

Если оболочка работает в режиме POSIX или выражение является частью команды [[, операторы «<» и «>» выполняют сортировку с учётом текущей локали. Если оболочка работает не в режиме POSIX, команды test и «[» сортируют лексикографически в порядке ASCII.

Исторический разбор приоритета операторов при наличии 4 или более аргументов может приводить к неоднозначностям при встрече со строками, похожими на первичные выражения. Стандарт POSIX объявил устаревшими первичные выражения -a и -o, а также заключение выражений в скобки. В сценариях больше не следует их использовать. Гораздо надёжнее ограничивать вызовы test одним первичным выражением и заменять -a и -o операторами списков && и || оболочки. Например, используйте

test -n string1 && test -n string2

вместо

test -n string1 -a -n string2
times
times

Выводит пользовательское и системное время, использованное оболочкой и её дочерними процессами. Код возврата равен нулю.

trap
trap [-lpP] [action] [sigspec ...]

action — это команда, которая считывается и выполняется, когда оболочка получает один из сигналов sigspec. Если action отсутствует (и задан только один sigspec) или равен «-», обработка каждого указанного sigspec сбрасывается до значения, имевшегося при запуске оболочки. Если action — пустая строка, оболочка и вызываемые ею команды игнорируют сигнал, указанный каждым sigspec.

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

Если action не задано и указан параметр -p, trap отображает команды-ловушки, связанные с каждым sigspec, или, если sigspec не заданы, со всеми перехватываемыми сигналами, в виде набора команд trap, которые можно повторно использовать в качестве ввода оболочки для восстановления текущей обработки сигналов. Параметр -P работает аналогично, но отображает только действия, связанные с каждым аргументом sigspec. Для -P требуется как минимум один аргумент sigspec. Параметры -P или -p можно использовать в окружении подоболочки (например, при подстановке команды); если они используются до того, как trap изменит обработку сигнала, будет отображено состояние ловушек родительской оболочки.

Параметр -l выводит список имён сигналов и соответствующих им номеров. Каждый sigspec представляет собой имя или номер сигнала. Регистр символов в именах сигналов не учитывается, а префикс SIG указывать необязательно. Если параметр -l указан без аргументов sigspec, выводится список допустимых имён сигналов.

Если sigspec — это 0 или EXIT, action выполняется при завершении работы оболочки. Если sigspec — это DEBUG, action выполняется перед каждой простой командой, командой for, командой case, командой select, арифметической командой ((, условной командой [[, арифметической командой for и перед выполнением первой команды в функции оболочки. Подробные сведения о влиянии параметра оболочки extdebug (см. Встроенная команда Shopt) на ловушку DEBUG см. в её описании. Если sigspec — это RETURN, action выполняется каждый раз после завершения функции оболочки или сценария, запущенного с помощью встроенных команд . или source.

Если sigspec — это ERR, action выполняется каждый раз, когда конвейер (который может состоять из одной простой команды), список или составная команда завершается с ненулевым кодом, при соблюдении следующих условий. Ловушка ERR не выполняется, если завершившаяся с ошибкой команда является частью списка команд, непосредственно следующего за зарезервированным словом until или while, частью проверки после зарезервированного слова if или elif, частью команды, выполняемой в списке && или ||, за исключением команды после последнего && или ||, любой командой конвейера, кроме последней (в зависимости от состояния параметра оболочки pipefail), либо если код возврата команды инвертируется с помощью !. Это те же условия, что и для параметра errexit (-e).

Если оболочка не является интерактивной, сигналы, игнорируемые при запуске неинтерактивной оболочки, нельзя перехватывать или сбрасывать. Интерактивные оболочки позволяют перехватывать сигналы, игнорируемые при запуске. Перехватываемые сигналы, которые не игнорируются, сбрасываются к исходным значениям в подоболочке или её окружении при создании.

Код возврата равен нулю, если только sigspec не задаёт недопустимый сигнал; в противном случае он отличен от нуля.

true
true

Ничего не делает, возвращает статус 0.

umask
umask [-p] [-S] [mode]

Устанавливает маску создания файлов процесса оболочки в значение mode. Если значение mode начинается с цифры, оно интерпретируется как восьмеричное число; в противном случае оно интерпретируется как символьная маска режима, аналогичная маске, принимаемой командой chmod. Если значение mode не указано, umask выводит текущее значение маски. Если параметр -S указан без аргумента mode, umask выводит маску в символьном формате; по умолчанию выводится восьмеричное число. Если указан параметр -p, а значение mode не указано, вывод представляется в форме, которую можно использовать повторно в качестве входных данных. Статус возврата равен нулю, если режим успешно изменён или если аргумент mode не указан, и отличен от нуля в противном случае.

Обратите внимание: когда режим интерпретируется как восьмеричное число, каждое число в umask вычитается из 7. Таким образом, umask со значением 022 задаёт разрешения 755.

unset
unset [-fnv] [name]

Удаляет каждую переменную или функцию с именем name. Если указан параметр -v, каждое значение name обозначает переменную оболочки, и эта переменная удаляется. Если указан параметр -f, значения name обозначают функции оболочки, и определения этих функций удаляются. Если указан параметр -n, а name — это переменная с атрибутом nameref, значение name будет сброшено, а не переменная, на которую оно ссылается. Параметр -n не действует, если указан параметр -f. Если параметры не указаны, каждое значение name обозначает переменную; если переменной с таким именем нет, сбрасывается функция с таким именем, если она существует. Переменные и функции, доступные только для чтения, сбросить нельзя. При удалении переменных или функций они также удаляются из окружения, передаваемого последующим командам. Некоторые переменные оболочки сбросить нельзя. Некоторые переменные оболочки при сбросе утрачивают особое поведение; такие случаи указаны в описании соответствующих переменных. Статус возврата равен нулю, если ни одно значение name не является доступным только для чтения или не подлежит сбросу.

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/Bourne-Shell-Builtins.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API