我正在使用这个 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"