Piping StdOut fügt mehr Text hinzu

Piping StdOut fügt mehr Text hinzu

Ich führe einen einfachen Befehl aus (einige Kafka-bezogene Dinge):

curl localhost:8083

Die Ausgabe ist sehr einfach:

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

Aber wenn ich jetzt das Hilfsprogramm jqzum Formatieren von JSON verwende, werden weitere Zeilen hinzugefügt:

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

Dasselbe passiert, wenn ich es wie erwartet an lessoder weiterleite . Das hat also nichts mit sich selbst zu tun.catcurl ... | lessjq

Meine Kenntnisse über stdin, stdout, stderr, Pipes (die einfach nur Verknüpfungen von stdout mit sdtin sind), Dateiumleitungen > < 2>usw. erklären dieses Verhalten nicht. :(

Antwort1

Wie bei vielen UNIX-Tools curlhängt die Ausgabe von davon ab, an welchen Gerätetyp stdout angeschlossen ist. In diesem Fall jqändert das Weiterleiten der Ausgabe den Typ von TTYin pipe, was zu unerwünschter zusätzlicher Ausgabe führt.

curlverfügt über einen Befehlszeilenschalter -s, der diese zusätzliche Ausgabe stummschaltet. Das Ausführen curl -s localhost:8083/ | jqsollte das Problem daher lösen.

verwandte Informationen