Окружение выполнения команд
Оболочка имеет окружение выполнения, которое состоит из следующего:
- открытые файлы, унаследованные оболочкой при вызове, изменённые перенаправлениями, предоставленными встроенной команде
exec - текущий рабочий каталог, установленный командами
cd,pushd, илиpopd, или унаследованный оболочкой при вызове - маска создания файлов, установленная командой
umaskили унаследованная от родительской оболочки - текущие ловушки, установленные командой
trap - параметры оболочки, установленные присваиванием переменных или командой
setили унаследованные от родительской оболочки в окружении - функции оболочки, определённые во время выполнения или унаследованные от родительской оболочки в окружении
- включенные опции при вызове (по умолчанию или с аргументами командной строки) или командой
set - опции, включенные командой
shopt(см. Встроенную команду Shopt) - различные идентификаторы процессов, включая те из фоновых задач (см. Список команд), значение
$$, и значение$PPID
Когда должна быть выполнена простая команда, отличная от встроенной или функции оболочки, она вызывается в отдельном окружении выполнения, которое состоит из следующего. Если не указано иное, значения унаследованы от оболочки.
- открытые файлы оболочки, плюс любые изменения и добавления, указанные перенаправлениями для команды
- текущий рабочий каталог
- маска создания файлов
- переменные и функции оболочки, помеченные для экспорта, вместе с переменными, экспортированными для команды, передаваемые в окружении (см. Окружение)
- ловушки, перехваченные оболочкой, сбрасываются до значений, унаследованных от родительской оболочки, а игнорируемые оболочкой ловушки игнорируются
Команда, вызванная в этом отдельном окружении, не может повлиять на окружение выполнения оболочки.
Подоболочка — это копия процесса оболочки.
Подстановка команд, команды, сгруппированные в скобки, и асинхронные команды вызываются в окружении подоболочки, которое является дубликатом окружения оболочки, за исключением того, что перехваченные оболочкой ловушки сбрасываются до значений, которые оболочка унаследовала от своего родителя при вызове. Встроенные команды, которые вызываются как часть конвейера, также выполняются в окружении подоболочки. Изменения, внесенные в окружение подоболочки, не могут повлиять на окружение выполнения оболочки.
Подоболочки, запущенные для выполнения подстановок команд, наследуют значение опции -e от родительской оболочки. Когда режим POSIX не активен, Bash очищает опцию -e в таких подоболочках.
Если за командой следует символ «&» и управление задачами не активно, стандартный входной файл команды по умолчанию — пустой файл /dev/null. В противном случае вызываемая команда наследует дескрипторы файлов вызывающей оболочки, изменённые перенаправлениями.
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/Command-Execution-Environment.html