Что такое использование команды exec?

Я не могу помочь с установкой grub сейчас, но то, что я сделал, чтобы запустить мой RAID, я следую этой инструкции:

Как установить Ubuntu 8.04 с помощью программного обеспечения RAID1 | HowtoForge - Linux Howtos и Tutorials и установите grub на каждый раздел рейдов (не swap).

Это будет полезно, если сбой одного жесткого диска еще не работает.

1
задан 2 September 2016 в 12:41

2 ответа

Команда exec заменяет текущий процесс оболочки указанной командой. Обычно, когда вы запускаете команду, создается новый процесс (раздвоенный). Команда exec не порождает новый процесс. Вместо этого текущий процесс накладывается на новую команду. Другими словами, команда exec выполняется вместо текущей оболочки без создания нового процесса.

Существует три наиболее распространенных способа использования команды exec:

1. Замена процесса

Пример-1: если вы открываете новую bash оболочку как

$ bash 

в pstree, она выглядит как

├─gnome-terminal ├─bash───bash───pstree [d7 ] Предыдущая оболочка bash все еще существует, и вы получили новую оболочку bash. Если вы открываете новую оболочку bash как

$ exec bash

, то pstree показывает

├─gnome-terminal ├─bash───pstree

Здесь старый bash заменен новым. Особенно полезно выйти из нескольких логинов в одной команде. Пример-1: См. Выход из корня и пользователя с помощью одной команды

Пример-1: вы можете открыть файл как

[ f5]

Когда вы покидаете 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, которая вызывает следующий этап .

См. Выход из корня и пользователя с одной командой для более.

Примечание. Часть из этого взята из этого.

8
ответ дан 23 May 2018 в 06:32
  • 1
    Только завершает ответ (до сих пор). – heemayl 2 September 2016 в 19:42
  • 2
    Все, что я использовал exec, были для эффективности. Если вы запустите демон с помощью exec, вам нужно будет только один активный процесс вместо двух. Оставляя процесс bash вокруг, тратит несколько MB барана, среди прочего. – gmatht 3 September 2016 в 04:58

Насколько я знаю, он также используется для перенаправления файловых дескрипторов (например, STDOUT, STDERR, STDIN) сценария bash.

Так, например, вы можете читать из файла вместо этого с клавиатуры, используя перенаправление STDIN и запись в файл вместо терминала с помощью STDOUT (или может быть STDERR в зависимости от программы) перенаправления.

2
ответ дан 23 May 2018 в 06:32

Другие вопросы по тегам:

Похожие вопросы: