Как передать или перенаправить вывод curl -v?

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

Ответ 1

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

curl -vs google.com 2>&1 | less

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

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

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

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

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

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

Ответ 5

Следующие работали для меня:

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

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

sh abc.sh 1>stdout_output 2>stderr_output

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

Ответ 6

Этот простой пример показывает, как записывать вывод curl и использовать его в bash script

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 

Ответ 7

Только мои 2 цента. Команда ниже должна выполнить трюк, как было сказано ранее curl -vs google.com 2 > & 1

Однако, если нужно получить вывод в файл, curl -vs google.com > out.txt 2 > & 1

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