我似乎无法jq在shell管道中"正常"行事.例如:
$ curl -s https://api.github.com/users/octocat/repos | jq | cat
Run Code Online (Sandbox Code Playgroud)
结果在jq简单的打印出它的帮助文本*.如果我尝试将jq输出重定向到文件,会发生同样的事情:
$ curl -s https://api.github.com/users/octocat/repos | jq > /tmp/stuff.json
Run Code Online (Sandbox Code Playgroud)
jq如果它确定它不是从tty运行的话,是故意拯救?如何防止此行为以便我可以jq在管道中使用?
che*_*ner 305
您需要提供过滤器作为参数.要通过未经修改的JSON传递jq,默认情况下提供漂亮的打印,请使用标识过滤器.:
curl -s https://api.github.com/users/octocat/repos | jq '.' | cat
Run Code Online (Sandbox Code Playgroud)
mko*_*bit 13
我发现自己经常做的一个用例是"我如何构造JSON数据以提供给其他shell命令,例如curl?" 我这样做的方法是使用--null-input/-n选项:
根本不读任何输入!而是使用过滤器
null作为输入运行一次.当jq用作简单的计算器或从头构建JSON数据时,这非常有用.
并将一个示例传递给curl:
jq -n '{key: "value"}' | curl -d @- \
--url 'https://some.url.com' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json'
Run Code Online (Sandbox Code Playgroud)