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?
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 commande2| 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