Выбор ответа Senior Bash-скрипты обновлено
set -e и local
Вопрос
Скрипт начинается с set -e. Почему функция не прерывается, когда curl падает?
fetch() {
local body=$(curl -fsS https://api.example.com)
echo "$body"
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Код строки это код команды local, он успешен и маскирует ошибку. У строки local x=$(cmd) код возврата от local, а не от cmd.
Варианты ответа
set -eне действует внутри функций, только на верхнем уровне скриптаcurl -fпри HTTP-ошибке всё равно возвращает код 0, а не ошибку- Код строки это код команды
local, он успешен и маскирует ошибкуправильный ответ - Подстановка
$(...)выполняется в фоне, и её код не проверяется
Разбор
У строки local x=$(cmd) код возврата от local, а не от cmd. Правильно разделять: local body; body=$(curl ...). set -e в функциях работает (кроме вызова в условии), curl -f как раз возвращает 22 при HTTP-ошибке, подстановка выполняется синхронно. Ловушку ловит shellcheck (SC2155).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.