O Piping StdOut adiciona mais texto


1

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 eu uso a ferramenta utilitária jqpara 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 canalizá-lo para lessou catda maneira esperada curl ... | less. Portanto, isso não tem nada a ver com jqsi mesmo.

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


curl -q localhost:8083
Eugen Rieck 30/08

@EugenRieck não ajuda (mas mesmo que fosse, não iria explicar a questão)
eddyP23

curlverifica se stdout é um TTY ou um pipe e adapta sua saída de acordo com ele. Então, para calar a boca, você precisa curl -s localhost:8083/(-s para silêncio, não -q para silêncio como eu pensava) #
Eugen Rieck

Obrigado, eu estou feliz em aceitá-lo como uma resposta :) @EugenRieck
eddyP23

Respostas:


2

Como muitas ferramentas UNIX, a saída de curldepende de que tipo de dispositivo stdout está conectado. Nesse caso, a canalização da nossa saída jqaltera o tipo de TTYpara pipe, resultando em uma saída adicional indesejada.

curlpossui uma opção de linha de comando -s, que silencia essa saída adicional, portanto, executar o curl -s localhost:8083/ | jqshold resolve o problema.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.