Piping StdOut aggiunge più testo


1

Sto eseguendo un semplice comando (alcune cose relative a Kafka):

curl localhost:8083

Il suo output è molto semplice:

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

Ma ora, quando uso lo strumento di utilità jq per formattare JSON, vengono aggiunte più righe:

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

Lo stesso succede se lo canalizzo less o cat nel modo previsto curl ... | less. Quindi questo non ha nulla a che fare con jq si.

Conosco tutte le deviazioni di stdin, stdout, stderr, (che sono solo join di stdout in sdtin), reindirizzamenti di file > < 2>, ecc. non spiega questo comportamento. :(


curl -q localhost:8083
Eugen Rieck

@EugenRieck non aiuta (ma anche se lo fosse, non spiegherebbe il problema)
eddyP23

curl controlla, se stdout è un TTY o un pipe e adatta il suo output in base ad esso. Quindi per spegnerlo è necessario curl -s localhost:8083/ (-s per silent, no -q per quiet come pensavo)
Eugen Rieck

Grazie, sono felice di accettarlo come risposta :) @EugenRieck
eddyP23

Risposte:


2

Come molti strumenti UNIX, l'output di curl dipende da che tipo di dispositivo è collegato a stdout. In questo caso, eseguire il piping del throughput jq cambia il tipo da TTY a pipe, con conseguente output aggiuntivo indesiderato.

curl ha un interruttore a linea di comando -s, che silenzia questo output aggiuntivo, quindi in esecuzione curl -s localhost:8083/ | jq dovrebbe risolvere il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.