Выполняются ли функции как подпроцессы в Bash?

Это просто центральное место, где службы могут отправлять и читать сообщения о своих событиях. Посмотрите на удобный для человека интерфейс на https://apps.fedoraproject.org/datagrepper/raw , чтобы получить представление.

28
24.08.2016, 20:37
3 ответа

Advanced Bash-Scripting Guide не всегда надежен, и его примеры сценариев содержат устаревшие методы, такие как использование эффективно устаревших обратных ссылок для подстановки команд, то есть `command` а не $ (команда) .

В данном конкретном случае это явно неверно.

В разделе Функции оболочки в (каноническом) руководстве Bash окончательно сказано, что

функции оболочки выполняются в текущем контексте оболочки; для их интерпретации не создается никакого нового процесса.

45
27.01.2020, 19:38

Функции фигурных скобок будут выполняться в вызывающем процессе оболочки, если им не нужна их собственная подоболочка, а именно:

  • , когда вы запускаете их в фоновом режиме с помощью и
  • , когда вы запускаете их как ссылку в pipeline

Перенаправления или дополнительный env. переменные не будут принудительно создавать новую подоболочку:

hw(){
    echo hello world from $BASHPID
    echo var=$var
} 
var=42 hw >&2
echo $BASHPID  #unexports var=42 and restores stdout here

Если вы определяете функцию в круглых скобках вместо фигурных скобок:

hw()(
  echo hello world from $BASHPID
)
hw 
echo $BASHPID

она всегда будет запускаться в новом процессе.

Подстановка команд $ () также всегда создает процессы в bash (но не в ksh, если вы запускаете встроенные команды внутри него).

42
27.01.2020, 19:38

Команда, о которой идет речь в этом примере, выглядит так:

echo ${arrayZ[@]/%e/$(replacement)}

В приведенном ниже примере говорится:

#    $( ... ) is command substitution.
#    A function runs as a sub-process.

Благотворительность для руководства ABS, что они, по-видимому, имели в виду write заключается в том, что функция выполняется внутри подстановки команд , а команда внутри подстановки команд выполняется в подоболочке .

10
27.01.2020, 19:38

Теги

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