我正在运行一个简单的命令(一些与 Kafka 相关的东西):
curl localhost:8083
它的输出非常简单:
root@debian:/etc/kafka# curl localhost:8083/
{"version":"0.11.0.0-cp1","commit":"6a8cf706ddc9ab6a"}root@debian:/etc/kafka#
但是现在,当我使用实用工具jq
来格式化 json 时,会添加更多行:
root@debian:/etc/kafka# curl localhost:8083/ | jq
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 54 100 54 0 0 1492 0 --:--:-- --:--:-- --:--:-- 1500
{
"version": "0.11.0.0-cp1",
"commit": "6a8cf706ddc9ab6a"
}
如果我以预期的方式将其传输到less
或,也会发生同样的情况。所以这与其本身无关。cat
curl ... | less
jq
我对所有 stdin、stdout、stderr、管道(只是 stdout 到 sdtin 的连接)、文件重定向> < 2>
等的了解都无法解释这种行为。:(
答案1
与许多 UNIX 工具一样, 的输出curl
取决于 stdout 所连接的设备类型。在这种情况下,通过 管道传输输出jq
会将类型从 更改为TTY
,pipe
从而导致不必要的额外输出。
curl
有一个命令行开关-s
,可以使这个额外的输出静音,所以运行curl -s localhost:8083/ | jq
应该可以解决这个问题。