Я учу exec
команду. Я знаю, что exec
команда заменяет процесс, который ее запустил. Так что невозможно вернуться к процессу, который заменяется exec
командой.
Можно сказать, что его цель - сделать невозможным возврат к процессу, который его начал.
Но каковы другие способы использования чего-то вроде exec
команды?
command-line
mizech
источник
источник
exec ssh server-that-does-byobu-on-login.example.com
очень приятным то, что ^ A ^ D вообще закрывает терминал. (В более общем смысле,exec byobu
(илиexec screen
,exec tmux
).Ответы:
В скрипте
exec
используется в основном в скриптах-обёртках.Если вы хотите изменить среду для программы перед выполнением основной программы, вы часто пишете скрипт и в конце запускаете основную программу. Но нет необходимости, чтобы сценарий оставался в памяти в это время. Таким образом,
exec
используется в этих случаях, так что основная программа может заменить материнский скрипт.Вот практический пример этого. Это
mate-terminal.wrapper
скрипт поставляется с Mate-терминал. Он начинаетсяmate-terminal
с некоторых дополнительных аргументов, проверяя среду пользователя.Обратите внимание: здесь есть
exec
вызов, который заменяет этот скрипт в памяти.На аналогичный вопрос ответили на сайте Unix & Linux StackExchange - https://unix.stackexchange.com/q/270929/19288.
Для перенаправления файлов-дескрипторов
Другое распространенное использование
exec
- перенаправление файловых дескрипторов.stdin
,stdout
,stderr
Могут быть перенаправлены на файлы с помощью EXEC.Перенаправление
stdout
-exec 1>file
приведет к тому, что стандартным выводом будет файл с именемfile
для конца текущего сеанса оболочки. Все, что выводится на дисплей, будет в файле.Перенаправление
stdin
- это также может быть использовано для перенаправления вstdin
файл. Например, если вы хотите выполнить файл сценарияscript.sh
, вы можете просто перенаправитьstdin
его в файл, используяexec 0<script.sh
.источник
exec
: он используется при перенаправлении файловых дескрипторов.Команда
exec
заменяет текущий процесс оболочки указанной командой. Обычно, когда вы запускаете команду, создается новый процесс (разветвляется). Командаexec
не порождает новый процесс. Вместо этого текущий процесс перекрывается новой командой. Другими словами,exec
команда выполняется вместо текущей оболочки без создания нового процесса.Существует три наиболее распространенных варианта использования команды exec:
1. Замена процесса
Пример 1: если вы открываете новую
bash
оболочку какв
pstree
это похожеПредыдущая
bash
оболочка все еще там, и вы получили новуюbash
оболочку. Принимая во внимание, что если вы откроете новую оболочку bash как,на
pstree
шоуЗдесь старое
bash
заменяется новым. Это особенно полезно для выхода из нескольких входов в систему в одной команде. Это более безопасно и исключает возможность покидания открытого терминала по ошибке. См. Выход из root и пользователя с помощью одной командыПример 2: вы можете открыть файл как
Когда вы выходите,
vi
нет необходимости закрывать терминал отдельно, так как оболочка уже заменена. Как только вы закроете vi, терминал также закроется.2. Способ перенаправления файловых дескрипторов внутри сценариев оболочки
exec
Команда также может быть использована в скриптах динамически открывать, закрывать и копирование файловых дескрипторов. Это позволяет выполнять перенаправление STDIN, STDERR, STDOUT и других файловых дескрипторов в различные файлы внутри сценария оболочки вместо строки вызова команды. Если вы не указываете команду или аргументы, вы можете указать символы перенаправления и файловые дескрипторы для выполнения этих функций.Скажем, у вас есть сценарий оболочки, который
script.sh
вы хотите иметь файл журналаscript.log
, вы можете использоватьexec
как,что эквивалентно
3. Создание этапов процесса с помощью команды exec.
Вы также можете использовать команду exec для создания набора сценариев оболочки, которые выполняются друг за другом последовательно, как этапы процесса. Вместо того, чтобы порождать новые процессы каждый раз, когда вам нужно передать управление следующему сценарию, вы выполняете команду exec.
В этом случае последним оператором каждого этапа должна быть
exec
команда, которая вызывает следующий этап.Посмотрите использование
exec
команды в сценариях оболочки для получения дополнительной информации.Примечание: часть выше взята из этого.
источник
Насколько я знаю, он также используется для перенаправления файловых дескрипторов (например, STDOUT, STDERR, STDIN) bash-скрипта.
Так, например, вы можете читать из файла вместо клавиатуры с помощью перенаправления STDIN и записывать в файл вместо терминала с помощью перенаправления STDOUT (или может быть STDERR в зависимости от программы).
источник