Piping StdOut adiciona mais texto

1

Estou executando um comando simples (algumas coisas relacionadas a 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 eu uso a ferramenta utilitária jq para formatar o 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 enviar para less ou cat da maneira esperada curl ... | less . Então, isso não tem nada a ver com jq .

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. : (

    
por eddyP23 30.08.2017 / 14:04

1 resposta

2

Como muitas ferramentas do UNIX, a saída de curl depende do tipo de dispositivo ao qual o stdout está conectado. Nesse caso, canalizar a taxa de transferência através de jq altera o tipo de TTY para pipe , resultando em saída adicional indesejada.

curl tem uma linha de comando -s , que silencia essa saída adicional, então executar curl -s localhost:8083/ | jq shold resolve o problema.

    
por 30.08.2017 / 14:56