Piping StdOut fügt mehr Text hinzu

389
eddyP23

Ich führe einen einfachen Befehl aus (einige Dinge, die mit Kafka zu tun haben):

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# 

Wenn ich jetzt ein 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" } 

Gleiche passiert, wenn ich eine Pipe an lessoder catin der erwarteten Weise curl ... | less. Das hat also nichts mit sich jqselbst zu tun .

Mein Wissen über alle stdin, stdout, stderr, Pipes (die nur Verbindungen von stdout zu sdtin sind), Dateiumleitungen > < 2>usw. erklärt dieses Verhalten nicht. :(

1
`curl -q localhost: 8083` Eugen Rieck vor 6 Jahren 0
@EugenRieck hilft nicht (aber selbst wenn, würde es das Problem nicht erklären) eddyP23 vor 6 Jahren 0
`curl` prüft, ob stdout ein TTY oder eine Pipe ist, und passt seine Ausgabe entsprechend an. Um es zum Schweigen zu bringen, brauchst du `curl -s localhost: 8083 /` (-s für die Stille, nicht -q für die Stille, wie ich dachte) Eugen Rieck vor 6 Jahren 0
Danke, ich akzeptiere es gerne als Antwort :) @EugenRieck eddyP23 vor 6 Jahren 0

1 Antwort auf die Frage

2
Eugen Rieck

Wie bei vielen UNIX-Tools curlhängt die Ausgabe davon ab, an welchen Gerätetyp stdout angeschlossen ist. In diesem Fall jqändert das Durchleiten des Durchsatzes den Typ von TTYbis zu pipe, was zu einer unerwünschten zusätzlichen Ausgabe führt.

curlhat einen Befehlszeilenschalter -s, der diese zusätzliche Ausgabe zum Schweigen curl -s localhost:8083/ | jqbringt, so dass das Problem durch Ausführen gelöst werden muss.