能否通过单条JQ查询执行同对象内的cmd命令?
在JQ中执行同一对象内的命令
可以实现,但jq本身没有内置功能直接将字符串形式的jq表达式转为可执行代码,需要借助shell管道或外部jq进程调用完成。
针对你给出的示例JSON:
{ "cmd": ".name += \" Smith\" | .name", "name": "John" }
可以通过以下单条命令实现需求:
jq -r '.cmd' input.json | jq -f- input.json
命令解释:
- 第一个
jq -r '.cmd' input.json:从目标JSON中提取出cmd字段的字符串内容(即.name += " Smith" | .name),并以原始字符串输出。 - 管道
|将提取出的脚本内容传给第二个jq命令,-f-参数表示从标准输入读取jq脚本,同时指定原JSON文件input.json作为处理对象,最终执行脚本得到结果"John Smith"。
如果不想依赖外部文件,也可以将JSON内容内嵌到命令中:
json='{"cmd": ".name += \" Smith\" | .name", "name": "John"}'; echo "$json" | jq -r '.cmd' | jq -f- <(echo "$json")
内容的提问来源于stack exchange,提问作者Pitya Bhai
相关产品推荐
相关产品推荐

