Описание тега death-valley
Один из самых простых примеров обратного вызова в bash является одним многие люди знакомы с, но не понимаете, что шаблон на самом деле они используют:
хрон
Хрон позволяет указать исполняемый файл (двоичный или скрипт), хрон программа перезвонить, когда некоторые условия (время спецификация)
Скажем, у вас есть сценарий под названием doEveryDay.sh
. Не отзвонились способ, чтобы написать скрипт:
#! /бин/Баш
пока правда; сделать
сделать
спи $TWENTY_FOUR_HOURS
сделано
На обратный путь писать просто:
#! /бин/Баш
сделать
Затем в crontab бы вы установили что-то вроде
0 0 * * * doEveryDay.sh
Вы бы тогда не нужно писать код, чтобы ждать событий для запуска, но вместо того, чтобы полагаться на хрон
назвать свой код обратно.
Теперь рассмотрим, как написать этот код в bash.
Как бы вы выполнить другой скрипт/функцию в bash?
Давайте напишем функцию:
every24hours функция () {
Обратного вызова=1$; # предполагаем, переданного единственным аргументом
# то, что мы можем "назвать"/выполнение
пока правда; сделать
$Обратного вызова ;# просто вызвать обратный вызов
спи $TWENTY_FOUR_HOURS
сделано
}
Теперь вы создали функцию, которая принимает функцию обратного вызова. Вы можете просто вызвать его, как это:
# "пинг" сайте Google каждый день
every24hours 'google.com завиток'
Конечно, функция every24hours никогда не возвращается. Баш немного уникален тем, что мы можем очень легко сделать его асинхронным и породит процесс путем добавления &
:
every24hours 'google.com завиток' &
Если вы не хотите, что это функция вы можете сделать это в качестве сценария, а не:
#every24hours.sh
Обратного вызова=1$; # предполагаем, переданного единственным аргументом
# то, что мы можем "назвать"/выполнение
пока правда; сделать
$Обратного вызова ;# просто вызвать обратный вызов
спи $TWENTY_FOUR_HOURS
сделано
Как вы можете видеть, вызовы в bash является тривиальным. Это просто:
CALLBACK_SCRIPT=3$; # или некоторые другие
аргумент # к
# функция/скрипт
И вызов callback-это просто:
$SOME_CALLBACK_FUNCTION_OR_SCRIPT
Как вы можете видеть форму выше, обратные вызовы редко непосредственно особенности языков. Они, как правило, программирование в творческой манере, используя существующие языковые особенности. Любой язык, который может хранить указатель/ссылку/копию какого-то блока кода/функции/скрипта можете реализовать обратные вызовы.