Respostas:
adicione a -s
opção (silencioso) para remover o medidor de progresso, então redirecione stderr para stdout para obter saída detalhada no mesmo fd que o corpo da resposta
curl -vs google.com 2>&1 | less
2>&1
.
Seu URL provavelmente contém "e" comercial. Eu tive esse problema também, e percebi que minha URL estava cheia de "e" comercial (de variáveis CGI sendo passadas) e então tudo estava sendo enviado para segundo plano de uma forma estranha e, portanto, não redirecionando corretamente. Se você colocar aspas em torno do URL, ele o corrigirá.
A resposta acima não funcionou para mim, o que acabou funcionando foi esta sintaxe:
curl https://${URL} &> /dev/stdout | tee -a ${LOG}
tee coloca a saída na tela, mas também a anexa ao meu log.
&> /dev/stdout
era definitivamente a parte que faltava, obrigado
Se precisar da saída em um arquivo, você pode usar um redirecionamento:
curl https://vi.stackexchange.com/ -vs >curl-output.txt 2>&1
Certifique-se de não inverter o >curl-output.txt
e 2>&1
, o que não funcionará devido ao comportamento de redirecionamento do bash .
Achei a mesma coisa: o curl por si só imprimiria em STDOUT, mas não poderia ser canalizado para outro programa.
No início, pensei que tinha resolvido usando xargs para ecoar a saída primeiro:
curl -s ... <url> | xargs -0 echo | ...
Mas então, conforme apontado nos comentários, ele também funciona sem a parte xargs, portanto -s
(modo silencioso) é a chave para evitar a saída de progresso estranho para STDOUT:
curl -s ... <url> | perl -ne 'print $1 if /<sometag>([^<]+)/'
O exemplo acima captura o <sometag>
conteúdo simples (sem tags incorporadas) da saída XML da instrução curl.
Apenas meus 2 centavos. O comando abaixo deve resolver o problema, conforme respondido anteriormente
curl -vs google.com 2>&1
No entanto, se precisar obter a saída para um arquivo,
curl -vs google.com > out.txt 2>&1
Deveria trabalhar.
Este exemplo simples mostra como capturar a saída curl e usá-la em um script 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
, os erros serão redirecionados corretamente para a saída padrão para mim.