Piping StdOut adiciona mais texto

Piping StdOut adiciona mais texto

Estou executando um comando simples (algumas coisas relacionadas ao Kafka):

curl localhost:8083

Sua saída é muito simples:

root@debian:/etc/kafka# curl localhost:8083/
{"version":"0.11.0.0-cp1","commit":"6a8cf706ddc9ab6a"}root@debian:/etc/kafka#

Mas agora, quando uso a ferramenta utilitária jqpara formatar json, mais linhas são adicionadas:

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"
}

O mesmo acontece se eu canalizar para lessou catda maneira esperada curl ... | less. Então isso não tem nada a ver jqconsigo mesmo.

Meu conhecimento de todos os stdin, stdout, stderr, pipes (que são apenas junções de stdout para sdtin), redirecionamentos de arquivo > < 2>, etc. não explica esse comportamento. :(

Responder1

Como muitas ferramentas UNIX, a saída curldepende do tipo de dispositivo ao qual o stdout está conectado. Nesse caso, canalizar o ourput jqaltera o tipo de TTYpara pipe, resultando em saída adicional indesejada.

curlpossui uma opção de linha de comando -sque silencia essa saída adicional; portanto, a execução curl -s localhost:8083/ | jqdeve resolver o problema.

informação relacionada