如何在shellpipe道中使用`jq`?
我似乎无法让jq
在shellpipe道中正常运行。 例如:
$ curl -s https://api.github.com/users/octocat/repos | jq | cat
导致jq
只是打印出帮助文本*。 同样的事情发生,如果我试图redirectjq
的输出到一个文件:
$ curl -s https://api.github.com/users/octocat/repos | jq > /tmp/stuff.json
如果jq
确定它不是从tty运行的话, jq
是故意排除的吗? 我怎样才能防止这种行为,以便我可以在pipe道中使用jq
?
* (我知道这个例子包含了一个无用的猫 ;它只是为了说明的目的)
你需要提供一个filter作为参数。 要通过未经修改的JSON来传递JSON,默认情况下,使用标识filter.
:
curl -s https://api.github.com/users/octocat/repos | jq '.' | cat
我发现自己经常使用的一个用例是“如何构buildJSON数据以供应其他shell命令,例如curl
? 我这样做的方式是使用--null-input/-n
选项:
根本不读任何input! 相反,filter使用
null
作为input运行一次。 将jq
用作简单计算器或从头开始构buildJSON数据时,这非常有用。
而一个例子将其传递给curl
:
jq -n '{key: "value"}' | curl -d @- \ --url 'https://some.url.com' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json'