Является ли термин «ловушка» (Bash) более точным, чем общий термин «обратный вызов» в программировании? - PullRequest
0 голосов
/ 14 апреля 2019

Обратите внимание:

scripttmp=$(mktemp -d)

cleanup() {
    rm -rf "${scripttmp}"
}

trap cleanup EXIT

Я понимаю, cleanup - это функция "call (ed) back", так как она вызывается непосредственно перед выходом из основной функции (которую я понимаю как функцию вобщий смысл, хотя синтаксиса функций нет во всем коде).

Если дело в том, что я никогда раньше не звонил cleanup, и это первый раз, я действительно не "перезвонил"--- Я просто называю это перед выходом, но не "назад".

Является ли термин trap более точным, чем общий термин "обратный вызов" в программировании?

1 Ответ

2 голосов
/ 14 апреля 2019

«Обратный вызов» происходит от того факта, что вы даете подпрограмме кусок кода для последующего выполнения (для случаев, когда выполняется какое-либо условие), и подпрограмма «вызывает обратно», выполняя этот код.

Сравнитеэто дает кому-то свой номер телефона, когда он ему нужен.Когда им это нужно, они перезванивают.В этот момент они, возможно, никогда не звонили вам раньше.

В сценарии оболочки trap используется для установки обратного вызова, который будет оцениваться, когда сигнал «пойман» или «захвачен».Стандартная оболочка также позволяет перехватывать точку при выходе из оболочки (EXIT), а оболочка bash дополнительно поддерживает ошибки перехвата (ERR), выход из функции (RETURN) и каждую простую команду (DEBUG).

Утилита trap не позволяет вызывать функцию обратного вызова для общих асинхронных событий.

В вашем примере cleanup можно назвать функцией обратного вызова.Он устанавливается с trap и будет выполняться непосредственно перед выходом из текущей оболочки.Другими словами, утилита trap устанавливает ловушку EXIT, которая будет вызывать функцию обратного вызова cleanup.

Код, установленный trap action event, будет выполняться аналогично eval action, когдаданное event происходит.Поэтому action может быть любым шелл-кодом, не обязательно просто вызовом функции.

Другим словом для вашей cleanup функции будет «обработчик», подпрограмма, которая обрабатывает что-то, и, возможно, более конкретно »EXIT обработчик ".Если бы он использовался для обработки перехваченного сигнала, он был бы «обработчиком сигнала для этого конкретного сигнала».Также обычно называют эту функцию «обработчиком ловушек» (обработчик устанавливается trap) или просто «ловушкой», хотя это не «более точно».

...