我有一些未格式化的JSON文件。我想用jq格式化它们,并通过更少的方式查看格式化的输出:
cat *.json | jq | less
但这是行不通的。只是显示jq的帮助。
好的,jq需要一个过滤器,最小为a .
,但是...
cat *.json | jq
为我工作。
有什么区别?看到解析命令行是Shell的任务,这是Bash的错误吗?为什么只有jq会发生这种情况?
jq
如果检测到其输出流是终端,则某些事情会有所不同。一方面,它对输出进行颜色编码(除非您显式关闭该选项)。但是与这个问题更相关的是,对于1.5版,如果它检测到其输出流是一个终端并且其输入流不是一个终端,并且根本没有任何非选项命令行参数,则假定您打算使用过滤器.
。
这就是您输入时发生的情况cat *.json | jq
。在这种情况下,jq的输入流是管道(来自cat
命令),但其输出流是终端。因此,假设默认过滤器为.
。
但是,当您jq
通过Through传递输出时less
,jq
的输出流不再是终端。现在是管道(连接到less
流程)。因此,.
没有插入自动过滤器,并且jq
抱怨没有提供过滤器。
但是,如果升级到v1.6,您会发现行为已更改。在V1.6,没有任何过滤器的调用将被调整为.
,除非两个输入流和输出流是一个终端。因此,如果您进行升级,则会发现它的cat *.json | jq | less
工作方式与大致相同cat *.json | jq
,不同之处在于输出是彩色的,当然也不会分页。
顺便说一句,如果您想使用来查看彩色输出less
(并且您正在使用Gnu less
),那么可以使用以下命令:
cat *.json | jq . -C | less -R # The . is not necessary with v1.6
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句