В комментарии вы сказали: «Я бы предпочел не перенаправлять вывод std, так как хочу видеть подлинные ошибки». Если бы это был я, я бы захватил стандартный вывод, проверил, был ли это ответ об ошибке, и если да, отобразил бы его.
например.,
rslt=$( curl ... )
stat=${rslt##*\<rsp stat=\"}
stat=${stat%%\"\>*}
if [[ "$stat" == "fail" ]]; then
# parse: <err code="4" msg="your bad" />
code=${rslt##*\<err code=\"}
code=${code%%\"*}
msg=${rslt##*msg=\"}
msg=${msg%%\"*}
fi
echo "curl failed: $stat: ($code): $msg"
Конечно, это очень зависит от формата ответа HTML, поэтому он сломается, если сервер изменит формат ответа.