Встроенные команды оболочки 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 аргумента
-
Следующие условия проверяются в указанном порядке.
- Если второй аргумент является одним из бинарных условных операторов (см. Условные выражения Bash), результатом выражения становится результат бинарной проверки с использованием первого и третьего аргументов в качестве операндов. Операторы «-a» и «-o» считаются бинарными операторами, если аргументов три.
- Если первый аргумент — «!», значением является отрицание результата двухаргументной проверки, использующей второй и третий аргументы.
- Если первый аргумент в точности равен «(», а третий аргумент в точности равен «)», результатом является одноаргументная проверка второго аргумента.
- В противном случае выражение ложно.
- 4 аргумента
-
Следующие условия проверяются в указанном порядке.
- Если первый аргумент — «!», результатом является отрицание трёхаргументного выражения, составленного из остальных аргументов.
- Если первый аргумент в точности равен «(», а четвёртый аргумент в точности равен «)», результатом является двухаргументная проверка второго и третьего аргументов.
- В противном случае выражение разбирается и вычисляется согласно приведённым выше правилам приоритета.
- 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