В Linux команда exec заменяет текущий процесс оболочки указанной командой — по сути, переносит идентификатор процесса текущей оболочки в новый процесс, который затем принимает этот PID.
Большинство случайных пользователей Linux для настольных ПК не должны использовать exec . Это мощная программа с узким сценарием использования для сценариев. В обычных обстоятельствах редко бывает полезно вызывать exec для рутинных операций оболочки.
Как работает exec
Когда вы запускаете exec с новой командой в качестве аргумента, Linux запускает эту новую команду, используя тот же процесс, что и вызывающая ее оболочка. Если вы запустите его без указания новой команды, соответствующие перенаправления будут иметь место в текущей оболочке.
Например, когда вы запускаете сеанс оболочки, запуская программу управления терминалами, автоматически запускается оболочка по умолчанию. Когда вы набираете exit , сеанс оболочки завершается, и, в зависимости от программного обеспечения для управления терминалом , окно может исчезать.
Чтобы увидеть, как работает exec , запустите оболочку, затем запустите вторую сессию в том же сеансе. Если вы используете Zsh, например, то, когда откроется окно терминала, запустите другой сеанс Zsh.
Когда вы проверите запущенный процесс, вы увидите, что каждый раз, когда вы вызываете оболочку, появляется новое задание с отдельным идентификатором процесса. И каждый раз, когда вы выходите из сеанса оболочки с помощью команды выхода , один из этих сеансов завершается.
Если вы выполните дату из сеанса оболочки, вы увидите дату, отображаемую для стандартного вывода. Если затем вы используете exec для перенаправления стандартного вывода в текстовый файл, стандартный вывод, который вы ожидаете увидеть, записывает в файл, пока вы не выйдете из сеанса Zsh, который контролирует exec . При выходе стандартный вывод отображается так, как ожидалось, поскольку исходный сеанс Zsh снова становится активным.
Вариант использования для «exec»
Один из распространенных вариантов использования exec связан с приведением в порядок скрипта. Если вам нужно использовать сценарий для настройки параметров команды, то завершение сценария с помощью exec запускает новую программу с этими параметрами и закрывает текущий сеанс оболочки.