Если команда не указана, любые перенаправления могут действовать в текущей оболочке. Это краткая версия того, что говорится на странице руководства. Я понимаю, что когда exec
выполняется пустым, он не запускает новую оболочку, не вносит изменений в текущую и возвращает код 0, что означает, что он был выполнен без ошибки.
Да:
Обычно, когда вы запускаете команду, она вызывает fork
и exec
(, а также канал и т. д. ). Но когда вы добавляете exec
в начале (, например. exec ls
), он не вызывает fork
, поэтому оболочка заменяется командой. То есть команда выполняется в том же процессе, что и оболочка в (, оболочка больше не существует ).
Он применяет перенаправления, которые вступают в силу позже.