Допустим, проверка здоровья возвращает JSON с признаком готовности:
{"ready": false}В скрипте хочется прочитать поле и продолжить работу только после готовности. Кажется логичным проверить статус команды:
jq '.ready' health.json
echo "$?"
jq напечатает false, но сама команда успешно обработала JSON и завершится с кодом 0. Если использовать её напрямую в if, скрипт ошибочно пойдёт по ветке успеха.
Для проверки результата добавьте -e:
jq -e '.ready' health.json >/dev/null
echo "$?"
Теперь false или null дают ненулевой код. Но любой другой результат, в том числе число 0 или непустая строка, считается успешным. Поэтому для строгой проверки булевого поля лучше сравнить его с true:
if jq -e '.ready == true' health.json >/dev/null; then
echo "service is ready"
else
echo "service is not ready" >&2
exit 1
fi
Если поле отсутствует, выражение тоже вернёт false. А если JSON сломан, jq завершится с ошибкой разбора, и скрипт не примет его за успешный ответ.
➡️ DevOps Ready | #совет
