87 votes

Comment supprimer le compteur de progression de cUrl lors de la redirection de la sortie ?

J'essaie d'imprimer uniquement les sections verbeuses d'une requête cURL (qui sont envoyées à l'adresse suivante stderr ) à partir du Shell de bash.

Mais quand je redirige stdout comme ça :

curl -v http://somehost/somepage > /dev/null

Une sorte de tableau de résultats apparaît au milieu de la sortie pour stderr :

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0

Suivi par ceci vers la fin :

{ [data not shown]
118   592    0   592    0     0  15714      0 --:--:-- --:--:-- --:--:-- 25739

Ce qui rend les en-têtes de réponse moins lisibles.

Je ne vois pas ce texte quand je ne redirige pas.


Une autre façon de voir les effets :

La table n'apparaît pas :

curl -v http://somehost/somepage 2>&1

Le tableau apparaît :

curl -v http://somehost/somepage 2>&1 | cat

  1. Comment se fait-il que cela n'apparaisse qu'avec certains types de redirections ?

  2. Quel est le meilleur moyen de le supprimer ?

71voto

Damian Powell Points 315

Essayez ça :

curl -vs -o /dev/null http://somehost/somepage 2>&1

Cela supprimera le compteur de progression, enverra stdout à /dev/null et rediriger stderr (le -v sortie) à stdout .

29voto

Colonel Panic Points 18390
curl --fail --silent --show-error http://www.example.com/ > /dev/null

Cela supprimera le dialogue d'état, mais sinon, les erreurs seront affichées dans STDERR.

user@host:~# curl http://www.yahoo.com > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  254k    0  254k    0     0   403k      0 --:--:-- --:--:-- --:--:--  424k

Ce qui précède produit le tableau d'état lors de la redirection.

user@host:~# curl --fail --silent --show-error http://www.yahoo.com > /dev/null

La méthode ci-dessus supprime le tableau d'état lors de la redirection, mais les erreurs seront toujours envoyées à STDERR.

user@host:~# curl --fail --silent --show-error http://www.errorexample.com > /dev/null
curl: (6) Couldn't resolve host 'www.errorexample.com'

L'exemple ci-dessus est un exemple d'erreur vers STDERR.

user@host:~# curl -v --fail --silent --show-error http://www.errorexample.com > ~/output.txt 2>&1
user@host:~# cat ~/output.txt 
* getaddrinfo(3) failed for www.errorexample.com:80
* Couldn't resolve host 'www.errorexample.com'
* Closing connection #0
curl: (6) Couldn't resolve host 'www.errorexample.com'

Il suffit d'ajouter 2>&1 à la fin pour rediriger STDERR vers STDOUT (dans ce cas, vers un fichier).

7voto

Venkatt Guhesan Points 71

Selon man curl :

-s, --silent : Silent or quiet mode. Don't show progress meter or error messages. Makes Curl mute.

Exemple d'utilisation :

curl -s 'http://www.google.com'

ou si vous voulez capturer le HTTP-BODY dans une variable en bash

BODY=$( curl -s 'http://www.google.com' )
echo $BODY

Vous pouvez utiliser -s ou --silent de manière interchangeable.

5voto

Ian Mackinnon Points 5306

En ce qui concerne la question 1 ( comment cURL sait qu'il n'affiche la table que lorsque la sortie est redirigée), je ne savais pas qu'un programme pouvait savoir que ses sorties étaient dirigées, mais il semble que sur les systèmes POSIX, il existe une fonction isatty qui indique si un descripteur de fichier fait référence à un terminal ou non.

2voto

Alex Djioev Points 341

1) Comment se fait-il que cela n'apparaisse qu'avec certains types de redirections ?

de la page de manuel curl

Si vous voulez un indicateur de progression pour les requêtes HTTP POST ou PUT, vous devez rediriger la sortie de la réponse vers un fichier, en utilisant Shell redirect (>), -o [file] ou similaire.

curl doit utiliser isatty pour déterminer la redirection et imprime le compteur de progression lors de la redirection vers un fichier ou un tuyau Shell.

2) Quelle est la meilleure façon de le supprimer ?

de la page de manuel curl

-s, --silencieux

Mode silencieux ou silencieux. N'affiche pas le compteur de progression ni les messages d'erreur. Rend Curl muet. Il produira toujours les données que vous demandez, potentiellement même vers le terminal/stdout à moins que vous ne le redirigiez.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X