Piping StdOut добавляет больше текста

253
eddyP23

Я запускаю простую команду (некоторые вещи, связанные с Кафкой):

curl localhost:8083 

Его вывод очень прост:

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

Но теперь, когда я использую утилиту jqдля форматирования json, добавляется больше строк:

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

То же самое происходит, если я передаю трубку lessили catожидаемым образом curl ... | less. Так что это не имеет ничего общего с jqсамим собой.

Мои знания обо всех stdin, stdout, stderr, каналах (которые являются просто соединениями stdout и sdtin), перенаправления файлов > < 2>и т. Д. Не объясняют такое поведение. :(

1
`curl -q localhost: 8083` Eugen Rieck 6 лет назад 0
@EugenRieck это не помогает (но даже если бы это было, это не объяснило бы проблему) eddyP23 6 лет назад 0
`curl` проверяет, является ли stdout TTY или каналом, и адаптирует свой вывод в соответствии с ним. Поэтому, чтобы закрыть его, вам нужно `curl -s localhost: 8083 /` (-s для молчания, а не -q для молчания, как я и думал) Eugen Rieck 6 лет назад 0
Спасибо, я рад принять это как ответ :) @EugenRieck eddyP23 6 лет назад 0

1 ответ на вопрос

2
Eugen Rieck

Как и во многих инструментах UNIX, вывод curlзависит от того, к какому типу устройства подключен стандартный вывод. В этом случае передача нашего запроса jqизменяет тип с TTYна pipe, что приводит к нежелательному дополнительному выводу.

curlимеет переключатель командной строки -s, который отключает этот дополнительный вывод, поэтому запуск curl -s localhost:8083/ | jqshold решает проблему.

Похожие вопросы