Как передать или перенаправить вывод curl -v? - PullRequest
97 голосов
/ 25 марта 2011

По какой-то причине вывод всегда выводится на терминал, независимо от того, перенаправляю ли я его через 2> или> или |Есть ли способ обойти это?Почему это происходит?

Ответы [ 8 ]

105 голосов
/ 25 марта 2011

добавьте параметр -s (без вывода сообщений), чтобы удалить индикатор прогресса, а затем перенаправьте stderr на стандартный вывод, чтобы получить подробный вывод на том же fd, что и тело ответа

curl -vs google.com 2>&1 | less
101 голосов
/ 09 мая 2012

Ваш URL, вероятно, содержит амперсанды.У меня тоже была эта проблема, и я понял, что мой URL был полон амперсандов (из передаваемых переменных CGI), и поэтому все отправлялось в фон странным образом и, следовательно, не перенаправлялось должным образом.Если вы поставите кавычки вокруг URL, это исправит это.

22 голосов
/ 27 апреля 2014

Ответ выше не работал для меня, что в итоге привело к следующему синтаксису:

curl https://${URL} &> /dev/stdout | tee -a ${LOG}

tee выводит вывод на экран, но также добавляет его в мой журнал.

5 голосов
/ 09 марта 2018

Если вам нужен вывод в файле , вы можете использовать перенаправление:

curl https://vi.stackexchange.com/ -vs >curl-output.txt 2>&1

Пожалуйста, не переворачивайте >curl-output.txt и 2>&1, которые не будут работать из-за поведения перенаправления bash .

3 голосов
/ 21 февраля 2013

Я обнаружил то же самое: сам по себе curl будет печатать в STDOUT, но не может быть передан в другую программу.

Сначала я подумал, что решил эту проблему, используя xargs, чтобы сначала отобразить вывод:

curl -s ... <url> | xargs -0 echo | ...

Но тогда, как указано в комментариях, он также работает без части xargs, поэтому -s (тихий режим) является ключом к предотвращению вывода постороннего прогресса в STDOUT:

curl -s ... <url> | perl  -ne 'print $1 if /<sometag>([^<]+)/'

Приведенный выше пример извлекает простое содержимое <sometag> (не содержащее встроенных тегов) из вывода XML оператора curl.

0 голосов
/ 17 марта 2017

В этом простом примере показано, как захватить вывод curl и использовать его в скрипте bash

test.sh

function main
{
  \curl -vs 'http://google.com'  2>&1
  # note: add -o /tmp/ignore.png if you want to ignore binary output, by saving it to a file. 
}

# capture output of curl to a variable
OUT=$(main)

# search output for something using grep.
echo
echo "$OUT" | grep 302 
echo
echo "$OUT" | grep title 
0 голосов
/ 18 августа 2016

Просто мои 2 цента.Приведенная ниже команда должна помочь, как было сказано ранее

curl -vs google.com 2>&1

Однако, если нужно получить вывод в файл,

curl -vs google.com > out.txt 2>&1

должно работать.

0 голосов
/ 05 сентября 2015

У меня сработало следующее:

Поместите свой оператор curl в скрипт с именем abc.sh

Теперь запустите:

sh abc.sh 1>stdout_output 2>stderr_output

Вы получите результаты своего локона в stdout_output и информацию о прогрессе в stderr_output.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...