У меня есть скрипт bash примерно со следующей структурой:
function download {
# download a big file
}
function prepare_stuff {
# prepare some stuff
}
function process_download {
# process the downloaded file
}
download & prepare_stuff & wait
process_download
Первое, что он делает, это загружает файл размером в несколько сотен мегабайт. Пока идет загрузка, в фоновом режиме готовятся некоторые другие вещи. Когда оба из них завершены, загрузка обрабатывается.
download
может закончиться тремя разными способами:
- Загрузка не удалась (например, сервер недоступен)
- Файл был успешно загружен
- Файл не изменился на сервере с момента последней загрузки
Случай 1 является состоянием ошибки (в этом случае функция должна возвращать что-то отличное от нуля), а 2 и 3 - нет (т.е. возвращаемое значение должно быть равно нулю).
Теперь я хочу, чтобы process_download
пропустил фактическую обработку при обнаружении случая 1 или 3, поэтому мне нужно передать какой-то статус обратно из download
. Поскольку download
работает в подоболочке, переменная не будет работать (назначения выполняются в подоболочке и не передаются обратно в родительскую оболочку).
Как я могу передать какое-то значение из функции в подоболочке обратно в родительскую оболочку?