Lorsque je curl
un fichier et que je le dirige vers un fichier ou une autre commande, la sortie s'affiche dans mon terminal. Je ne suis pas sûr de savoir comment cela se produit, car le tuyau est censé tirer tout le tour de curl, non?
Par exemple:
$ curl http://www.archive.org/stream/Pi_to_100000000_places/pi.txt > /dev/null
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 129M 0 129M 0 0 22.5M 0 --:--:-- 0:00:05 --:--:-- 24.7M
J'utilise curl comme ceci:
curl http://www.archive.org/stream/Pi_to_100000000_places/pi.txt | some_other_command > some_file
Je ne veux pas diriger le statut vers une autre commande, je me demandais simplement comment il était capable d'afficher le statut. Cependant, montrant comment rediriger les deux flux ajoutés à la réponse, ne le supprimez pas.
Deux flux de sortie sont généralement disponibles: la sortie standard et l'erreur standard. En pratique, lors de l'exécution dans un terminal, les deux envoient des données au terminal. >
ne redirige que la sortie standard et curl imprime les données de progression sur l'erreur standard. Pour supprimer les deux, utilisez l'un des éléments suivants:
curl ... > /dev/null 2>&1
curl ... &> /dev/null # bash's combined redirection operator
curl -s ... # -s, --silent: Silent or quiet mode. Don't show progress meter or error messages.
Pour envoyer les deux à un tuyau:
curl ... 2>&1 | ...
curl |& ... # bash's combined pipe
Sauf si vous utilisez les opérateurs |&
ou &>
, tous les flux sont redirigés indépendamment.
Regarde aussi:
Lorsque vous utilisez curl
pour ouvrir une URL, vous obtenez deux résultats:
curl
lui-même.Curl devrait utiliser un moyen de montrer ces deux séparément, sans quoi le traitement de la sortie réelle (le contenu de l'URL) serait difficile et je finirais par avoir des contenus inutiles (statut de curl).
Donc, il utilise stderr
pour son statut et stdout
pour le contenu.
En utilisant >
, vous redirigez le contenu de l'URL (stdout) vers le /dev/null
, vous devriez en fait utiliser: 2> /dev/null
à la place.
Aussi, si vous voulez pépiner les deux à la prochaine commande:
curl url |& command
Si vous voulez seulement que le contenu soit redirigé vers la commande suivante sans voir l'état:
curl 2> /dev/null | command