Réponses:
ajoutez l' -s
option (silent) pour supprimer la jauge de progression, puis redirigez stderr vers stdout pour obtenir une sortie détaillée sur le même fd que le corps de la réponse
curl -vs google.com 2>&1 | less
2>&1
.
Votre URL contient probablement des esperluettes. J'ai eu ce problème aussi et j'ai réalisé que mon URL était pleine d'esperluettes (des variables CGI étant passées) et que tout était donc envoyé en arrière-plan d'une manière étrange et ne redirigeait donc pas correctement. Si vous mettez des guillemets autour de l'URL, cela le corrigera.
La réponse ci-dessus n'a pas fonctionné pour moi, ce qui a finalement été cette syntaxe:
curl https://${URL} &> /dev/stdout | tee -a ${LOG}
tee met la sortie à l'écran, mais l'ajoute également à mon journal.
&> /dev/stdout
était définitivement la partie manquante, merci
Si vous avez besoin de la sortie dans un fichier, vous pouvez utiliser une redirection:
curl https://vi.stackexchange.com/ -vs >curl-output.txt 2>&1
Assurez-vous de ne pas retourner le >curl-output.txt
et 2>&1
, ce qui ne fonctionnera pas en raison du comportement de redirection de bash .
J'ai trouvé la même chose: curl par lui-même serait imprimé sur STDOUT, mais ne pouvait pas être redirigé vers un autre programme.
Au début, je pensais l'avoir résolu en utilisant xargs pour faire écho à la sortie en premier:
curl -s ... <url> | xargs -0 echo | ...
Mais alors, comme indiqué dans les commentaires, cela fonctionne également sans la partie xargs, donc -s
(mode silencieux) est la clé pour empêcher une sortie de progression étrangère vers STDOUT:
curl -s ... <url> | perl -ne 'print $1 if /<sometag>([^<]+)/'
L'exemple ci-dessus récupère le <sometag>
contenu simple (ne contenant aucune balise incorporée) de la sortie XML de l'instruction curl.
Juste mes 2 cents. La commande ci-dessous devrait faire l'affaire, comme répondu précédemment
curl -vs google.com 2>&1
Cependant, si besoin d'obtenir la sortie dans un fichier,
curl -vs google.com > out.txt 2>&1
devrait marcher.
Cet exemple simple montre comment capturer la sortie curl et l'utiliser dans un 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
, les erreurs sont correctement redirigées vers la sortie standard pour moi.