Piping StdOut 添加更多文本

Piping StdOut 添加更多文本

我正在运行一个简单的命令(一些与 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或,也会发生同样的情况。所以这与其本身无关。catcurl ... | lessjq

我对所有 stdin、stdout、stderr、管道(只是 stdout 到 sdtin 的连接)、文件重定向> < 2>等的了解都无法解释这种行为。:(

答案1

与许多 UNIX 工具一样, 的输出curl取决于 stdout 所连接的设备类型。在这种情况下,通过 管道传输输出jq会将类型从 更改为TTYpipe从而导致不必要的额外输出。

curl有一个命令行开关-s,可以使这个额外的输出静音,所以运行curl -s localhost:8083/ | jq应该可以解决这个问题。

相关内容