[英]Conditional output using jq
我有 JSON 输入,如下所示。
{"value":{"error":"no such element","message":"no such element: xxx"}
{"value":null}
对于第二种情况,我想使用jq
返回退出状态为 0 (不打印任何内容),并且no such element: xxx
到 stderr 并为第一种情况返回退出状态 1 。
我不确定如何在jq
中实现这一点。 任何人都可以告诉我如何做到这一点的jq
代码吗? 谢谢。
指定退出代码的一种方法是使用内置过滤器halt_error
。 据我了解,为了满足您的规格,您可以这样写:
.value
| if . then .error | halt_error(1)
else null | halt_error(0)
end
请参阅jq 手册了解详细信息并探索变体(例如添加“\n”)。
我理解这个问题的方式(以及我在遇到这个问题之前一直在寻找的东西)是你希望jq
程序根据首先读取的输入类型以不同的状态码退出。
{"value":{"error":"no such element","message":"no such element: xxx"}}
{"value":null}
使用内置的halt
和halt_error
,您可以做到这一点:
jq -n 'inputs | .value | if .error then "\(.message)\n" | halt_error(1) else halt end' < file.json
这与当前答案之间的唯一区别是jq
在读取第一个输入后实际上会退出,并且会忽略文件的 rest。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.