Команда exec заменяет текущий процесс оболочки указанной командой. Обычно, когда вы запускаете команду, создается новый процесс (разветвляется). Команда exec не порождает новый процесс. Вместо этого текущий процесс перекрывается новой командой. Другими словами, execкоманда выполняется вместо текущей оболочки без создания нового процесса.
Существует три наиболее распространенных варианта использования команды exec:
1. Замена процесса
Пример 1:
если вы открываете новуюbashоболочку как
$ bash
в pstreeэто похоже
├─gnome-терминал
├─bash───bash───pstree
Предыдущая bashоболочка все еще там, и вы получили новую bashоболочку. Принимая во внимание, что если вы откроете новую оболочку bash как,
$ exec bash
на pstreeшоу
├─gnome-терминал
├─bash───pstree
Здесь старое bashзаменяется новым. Это особенно полезно для выхода из нескольких входов в систему в одной команде. Это более безопасно и исключает возможность покидания открытого терминала по ошибке. См. Выход из root и пользователя с помощью одной команды
Пример 2: вы можете открыть файл как
$ exec vi filename.txt
Когда вы выходите, viнет необходимости закрывать терминал отдельно, так как оболочка уже заменена. Как только вы закроете vi, терминал также закроется.
2. Способ перенаправления файловых дескрипторов внутри сценариев оболочки
exec Команда также может быть использована в скриптах динамически открывать, закрывать и копирование файловых дескрипторов. Это позволяет выполнять перенаправление STDIN, STDERR, STDOUT и других файловых дескрипторов в различные файлы внутри сценария оболочки вместо строки вызова команды. Если вы не указываете команду или аргументы, вы можете указать символы перенаправления и файловые дескрипторы для выполнения этих функций.
Скажем, у вас есть сценарий оболочки, который script.shвы хотите иметь файл журнала script.log, вы можете использовать execкак,
LOG=/path/to/script.log
exec 1>>$LOG
exec 2>&1
что эквивалентно
./script &>> /path/to/script.log
./script >> /path/to/script.log 2>&1
3. Создание этапов процесса с помощью команды exec.
Вы также можете использовать команду exec для создания набора сценариев оболочки, которые выполняются друг за другом последовательно, как этапы процесса. Вместо того, чтобы порождать новые процессы каждый раз, когда вам нужно передать управление следующему сценарию, вы выполняете команду exec.
В этом случае последним оператором каждого этапа должна быть execкоманда, которая вызывает следующий этап.
Посмотрите использование execкоманды в сценариях оболочки для получения дополнительной информации.
Примечание: часть выше взята из этого.