У меня есть эта строка кода, которая работает так, как ожидалось:
echo '{"slot":"we"}' | jq -re '.slot' || exit 1
однако этот код не вызывает ошибки, хотя я этого и ожидал:
echo ' ' | jq -re '.slot' || exit 1
и это тоже не так:
echo '' | jq -re '.slot' || exit 1
как я могу убедиться, что выдается ошибка, если ключ slot
не найден? Я имею в виду, что в обоих последних двух примерах код выхода равен 0.
На вопрос «как я могу убедиться, что он выдает ошибку, если ключ «слота» не найден?»: проверьте его, используя has/1
, и вызовите один из error/0
, error/1
, halt_error/0
или halt_error/1
в соответствии с окружающей логикой.
Ваш код отлично работает с jq 1.7. Если вы используете jq 1.6, вам нужно это:
jq -nre 'inputs.slot'
Это может быть вашей проблемой:
echo '' | jq -e '.slot'
выход с кодом0
для более старых версий jq (до jq 1.6 включительно). Начиная с jq 1.7, он завершается с кодом4
. (См. #1697)