Назад | Перейти на главную страницу

Как по-разному передать тело ответа завитка и печатного вывода?

Я хотел бы напечатать в командной строке некоторые выходные данные curl, такие как заголовки http, за которыми следует тело ответа, обработанного программой stdin / stdout. Например:

Распечатайте код состояния: curl -s -w "%{http_code} \\n" -o "/dev/null" http://myURL.com

А затем обработайте вывод с помощью инструмента синтаксического анализа json: curl -s http://myURL.com | python -mjson.tool

Я хотел бы сделать и то, и другое с помощью одной команды, и у меня такое ощущение, что это возможно благодаря опции -o, которая определяет разницу между выводом curl и фактическим ответом на запрос. Проблема в том, что -o записывает прямо в файл. У кого-нибудь есть взлом?

Вы можете использовать замену процесса bash >(cmd). Например:

curl -s -w "%{http_code}\n" -o >(ruby -ne 'printf("-%6s%s", $., $_)') http://www.example.com/

Другой вариант, который может удовлетворить ваши потребности: curl -v, который отправит заголовки на stderr, а тело - на stdout. Например.,

curl -v http://www.example.com/ | ruby -ne 'printf("-%6s%s", $., $_)'