Я хочу проверить http-коды ответа от curl
, но все же смогу получить возвращенные данные и сохранить их в переменной.
Я нашел этот ответ очень полезным: https://superuser.com/a/862395/148175
Пользователь описывает, как он создал новый дескриптор файла 3
, который перенаправляет на STDOUT
.
Затем он запустил curl
в подоболочке, где он захватил вывод -w "%{http_code}"
в переменную HTTP_STATUS
и вывод в STDOUT с помощью -o >(cat >&3)
.
Моя проблема в том, что я хочу записать вывод STDOUT в переменную после того, как я запустил curl внутри функции.
Это мой сценарий:
#!/bin/bash
exec 3>&1
function curlBinData {
HTTP_STATUS=$(curl -s -w "%{http_code}" -o >(cat >&3) https://www.google.com --data-binary $1)
if [ $HTTP_STATUS -ne 200 ]; then
echo Error: HTTP repsonse is $HTTP_STATUS
exit
fi
}
responsedata=$(curlBinData '{"head":5}')
echo $responsedata
Что он делает:
Вывод curl направляется на STDOUT
и печатается в окне консоли.
Что нужно
Поскольку функция, вызывающая curl
, запускается в подоболочке, она должна направлять вывод в переменную responsedata
.