У меня есть конечная точка, которая возвращает JSON (тело ответа). Мне нужно получить, свернув тело ответа и обработав его (например, с помощью jq). Оно работает:
response=$(curl -s https://swapi.co/api/people/1/?format=json)
name=$(echo $response tmpFile | jq '.name') # irrelevant command, but I need here response body
echo "name:"$name
Но мне также нужно показать код HTTP (чтобы показать, если запрос выполнен успешно):
curl -s -w "%{http_code}\n" -o /dev/null https://swapi.co/api/people/1/?format=json
Как получить тело ответа на переменную и показать HTTP-код одновременно (один запрос)?
Я нашел решение с временным файлом:
touch tmpFile
curl -s -w "%{http_code}\n" -o tmpFile https://swapi.co/api/people/1/?format=json
name=$(cat tmpFile | jq '.name') # irrelevant command, but I need here only body response
echo "name: "$name
rm tmpFile
Как обойтись без создания файла?
Я пытаюсь с именованным каналом (но это все еще нужно для создания файла на диске ...):
mkfifo tmpFifo
curl -s -w "%{http_code}\n" -o tmpFifo https://swapi.co/api/people/1/?format=json
name=$(cat tmpFifo | jq '.name') # irrelevant command, but I need here only body response
echo "name: "$name
rm tmpFifo
Но именованная труба не удаляется.
Есть решение без создания какого-либо файла, например, только переменные ведьмы или потоки?