如何在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'