Во-первых, примечание: в addr=null
нет ничего плохого по своей сути; Вы можете просто проверить это:
if [[ $addr = null ]]; then ...code here...; fi
Остальная часть этого ответа делает вид, что вышеизложенное не соответствует действительности. :)
Существуют две практики, которые отличаются простотой обработки ошибок в этом случае:
- Использование
set -o pipefail
позволит определить, не произошла ли какая-либо часть - не только последний компонент - конвейера оболочки.
- Использование
jq -e
приведет к тому, что состояние выхода jq
будет отражать, было ли возвращено содержимое, которое было либо ложным, либо нулевым.
Таким образом:
set -o pipefail
if addr=$(./xuez-cli getnetworkinfo | jq -er '.localaddresses[0].address'); then
: "address retrieved successfully; this message is not logged unless set -x is active"
else
echo "Running other logic here"
fi
... переходит к Running other logic here
, если либо jq
не удается (а -e
указывает, что false
и null
должны рассматриваться как отказы), или если xuez-cli
сообщает о неудачном статусе выхода.