
Я использую эту команду bash для записи тела ответа http json в файл:
curl -s "http://some.domain.com/getSomeJson" | jq . | tee someJson.json;
Но на самом деле мне хочется чего-то вроде этого:
curl -s "http://some.domain.com/getSomeJson" | jq . | tee someJson-THE_VALUE_OF_A_SPECIFIC_RESPONSE_HEADER_NAMED_X-FOO-BAR.json
Итак, на естественном языке:
Я хочу записать ответ на запрос cURL в файл, сохранив его довольно отформатированное содержимое json, и в то же время использовать один из заголовков ответа как часть имени файла указанного файла.
Мне все равно, в какой момент в команде происходит часть jq, пока содержимое файла в конечном итоге представляет собой довольно отформатированное содержимое json.
решение1
Файл json будет создан при запуске конвейера. В вашем случае, если имя файла не может быть финализировано до запуска конвейера, вам придется прервать конвейер.
Вы можете использовать -D
флаги и -o
для дампа заголовка ответа и тела ответа в два отдельных временных файла. Позже вы можете извлечь данные из этих временных файлов, чтобы составить имя файла, а затем записать тело ответа.
header_file="/path/to/a/file";
body_file="/path/to/anotherfile";
curl -s \
-D $header_file \
-o $body_file \
"http://some.domain.com/getSomeJson";
some_header=`grep THE_VALUE_OF_A_SPECIFIC_RESPONSE_HEADER_NAMED_X-FOO-BAR $header_file | cut -d ' ' -f2 | tr -d "\n" | tr -d "\r"`
jq . $body_file | tee "someJson-$some_header.json"