Risposte:
aggiungi l' -s
opzione (silenziosa) per rimuovere l'indicatore di avanzamento, quindi reindirizza stderr a stdout per ottenere un output dettagliato sullo stesso fd del corpo della risposta
curl -vs google.com 2>&1 | less
2>&1
.
Il tuo URL probabilmente contiene una e commerciale. Ho avuto anche questo problema e mi sono reso conto che il mio URL era pieno di e commerciali (dalle variabili CGI passate) e quindi tutto veniva inviato in background in un modo strano e quindi non reindirizzato correttamente. Se metti delle virgolette attorno all'URL, lo risolverà.
La risposta sopra non ha funzionato per me, quello che ha fatto alla fine è stata questa sintassi:
curl https://${URL} &> /dev/stdout | tee -a ${LOG}
tee inserisce l'output sullo schermo, ma lo aggiunge anche al mio registro.
&> /dev/stdout
era sicuramente la parte mancante, grazie
Se hai bisogno dell'output in un file puoi usare un reindirizzamento:
curl https://vi.stackexchange.com/ -vs >curl-output.txt 2>&1
Assicurati di non capovolgere >curl-output.txt
e 2>&1
, che non funzionerà a causa del comportamento di reindirizzamento di bash .
Ho trovato la stessa cosa: curl da solo stampa su STDOUT, ma non può essere convogliato in un altro programma.
All'inizio, pensavo di averlo risolto usando xargs per riprodurre prima l'output:
curl -s ... <url> | xargs -0 echo | ...
Ma poi, come sottolineato nei commenti, funziona anche senza la parte xargs, quindi -s
(modalità silenziosa) è la chiave per impedire l'output di progressi estranei a STDOUT:
curl -s ... <url> | perl -ne 'print $1 if /<sometag>([^<]+)/'
L'esempio precedente acquisisce il <sometag>
contenuto semplice (non contenente tag incorporati) dall'output XML dell'istruzione curl.
Solo i miei 2 centesimi. Il comando seguente dovrebbe fare il trucco, come risposto in precedenza
curl -vs google.com 2>&1
Tuttavia, se è necessario ottenere l'output in un file,
curl -vs google.com > out.txt 2>&1
dovrebbe funzionare.
Questo semplice esempio mostra come acquisire l'output di curl e utilizzarlo in uno 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
, gli errori vengono reindirizzati correttamente allo standard output per me.