web-dev-qa-db-fra.com

Redirection de la sortie d'apt-get

Il y a donc une sortie d'apt-get que je n'arrive pas à rediriger ailleurs. Voici un échantillon de ce que je vois:

Sudo apt-get -qq -y --force-yes install cowsay 2>&1 > /tmp/tmp.txt

Ceci est un exemple de commande que je lance le 16.04. J'inclus le --force-yes ici pour simuler un avertissement apt pour une utilisation future. Je m'attends maintenant à ce que cette commande redirige tout vers /tmp/tmp.txt; et la plupart du code le fait. Cependant, lorsque je l'exécute, j'obtiens ce qui suit:

$ Sudo apt-get -qq -y --force-yes remove cowsay 2>&1 > /tmp/tmp.txt
W: --force-yes is deprecated, use one of the options starting with --allow instead.

Comment puis-je obtenir des avertissements pour rediriger aussi vers mon fichier?

2
Christopher

Vous avez la commande de redirection de flux au mauvais endroit. Les redirections étant analysées de droite à gauche, vous devez d'abord écrire le > /tmp/tmp.txt, puis le 2>&1. Comme vous l'avez écrit, il redirige d'abord STDOUT vers le fichier, puis STDERR vers STDOUT.

C'est la commande correcte:

Sudo apt-get -qq -y --force-yes remove cowsay > /tmp/tmp.txt 2>&1

Mais il y a une alternative plus simple! Vous n'avez pas nécessairement besoin de rediriger STDERR dans STDOUT pour que les deux soient écrits dans un fichier. Il existe également un opérateur qui redirige directement STDOUT et STDERR vers un fichier: &>

Sudo apt-get -qq -y --force-yes remove cowsay &> /tmp/tmp.txt

Explication et informations complémentaires:

  • > filename redirige STDOUT (flux 1) vers filename
  • 2> filename redirige STDERR (flux 2) vers filename
  • &> filename redirige STDOUT et STDERR vers filename

De même si vous voulez diriger le résultat vers une seconde commande:

  • | redirige STDOUT (flux 1) vers le STDIN de la deuxième commande
  • 2| filename redirige STDERR (flux 2) vers le STDIN de la deuxième commande
  • &| filename redirige STDOUT et STDERR vers le STDIN de la deuxième commande
7
Byte Commander