По какой-то причине вывод всегда печатается на терминал, независимо от того, перенаправляю ли я его через 2 > или > или |. Есть ли способ обойти это? Почему это происходит?
Как передать или перенаправить вывод curl -v?
Ответ 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
должен работать.