Ответы:
добавьте параметр -s
(без звука), чтобы удалить индикатор выполнения, затем перенаправьте stderr на stdout, чтобы получить подробный вывод на том же fd, что и тело ответа
curl -vs google.com 2>&1 | less
2>&1
.
Вероятно, в вашем URL-адресе есть амперсанды. У меня тоже была эта проблема, и я понял, что мой URL-адрес был полон амперсандов (из-за переданных переменных CGI), и поэтому все отправлялось в фоновый режим странным образом и, следовательно, не перенаправлялось должным образом. Если вы заключите URL в кавычки, это исправит.
Приведенный выше ответ не сработал для меня, в конечном итоге сработал такой синтаксис:
curl https://${URL} &> /dev/stdout | tee -a ${LOG}
tee выводит результат на экран, но также добавляет его в мой журнал.
&> /dev/stdout
была определенно недостающая часть, спасибо
Если вам нужен вывод в файл, вы можете использовать перенаправление:
curl https://vi.stackexchange.com/ -vs >curl-output.txt 2>&1
Убедитесь, что вы не переворачиваете >curl-output.txt
и 2>&1
, это не сработает из-за поведения перенаправления bash .
Я обнаружил то же самое: curl сам по себе печатал в STDOUT, но не мог быть передан в другую программу.
Сначала я подумал, что решил эту проблему, используя xargs для вывода сначала вывода:
curl -s ... <url> | xargs -0 echo | ...
Но затем, как указано в комментариях, он также работает без части xargs, поэтому -s
(тихий режим) является ключом к предотвращению постороннего вывода прогресса в STDOUT:
curl -s ... <url> | perl -ne 'print $1 if /<sometag>([^<]+)/'
В приведенном выше примере извлекается простой <sometag>
контент (не содержащий встроенных тегов) из XML-вывода оператора curl.
Только мои 2 цента. Приведенная ниже команда должна помочь, как уже было сказано ранее.
curl -vs google.com 2>&1
Однако, если нужно получить вывод в файл,
curl -vs google.com > out.txt 2>&1
должно сработать.
Этот простой пример показывает, как захватить вывод curl и использовать его в сценарии bash.
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
curl -v url 2>&1
, ошибки будут правильно перенаправлены на стандартный вывод для меня.