我正在使用此 bash 命令將 json http 回應正文寫入檔案中:
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"