Скрипт Bash и curl: как получить код состояния и контент и сохранить в var в той же команде

Например, в PHP или Python вы можете делать curl и получать объект со всеми организованными свойствами.

В bash я должен вызвать приложение curl.

Мне нужно получить код состояния и контент в одной команде (это очевидно, потому что код статуса связан с успехом или не получить контент). Но как я могу это сделать?

Я пытаюсь это:

# get url in function
urlcurl=$(echo $@)
# create new file descriptor and redirect to STDOUT
exec 3>&1
# get curl status code and store in curlstatuscode
curlstatuscode=$(curl -L -k -w "%{http_code}" -o >(cat >&3) --silent \"${urlcurl}\")

Моя проблема связана с контентом: когда я выполняю это в терминале, я получаю контент в STDOUT (это должна была сделать команда). Но я пытаюсь сохранить этот STDOUT с помощью регулярных выражений перенаправления, и они не работают.

Один пример:

exec 3>&1
HTTP_STATUS=$(curl -k --silent -L -w "%{http_code}" -o >(cat >&3) 'http://example.com')
echo $HTTP_STATUS

Если вы не поняли, что я пытаюсь сделать, примерно режим (и недействительный) будет выглядеть примерно так:(я знаю, что это недопустимо, я только хочу уточнить)

HTTP_CONTENT=$(echo `HTTP_STATUS=$(curl -k --silent -L -w "%{http_code}" -o >(cat >&3) 'http://example.com'`)

HTTP_CONTENT получит содержимое, а HTTP_STATUS - код состояния скручивания.

Пожалуйста, не говорите пользователю на другом языке. Мне нужно решить это в Bash. Это очень просто сделать на других языках (в основном ориентированные объекты). Я действительно хочу сделать это в Bash.

Спасибо!

1 ответ

Решение

Поскольку http status является последней строкой в ​​выводе curl, вы можете сделать это в BASH:

out=$(curl -k --silent -L -w "\n%{http_code}" 'minecraft.net/haspaid.jsp?user=apterixbr')
http_status="${out##*$'\n'}"
http_content="${out%$'\n'*}"
Другие вопросы по тегам