Vous pouvez utiliser l'astuce suivante pour swap stdout
y stderr
. Ensuite, il suffit d'utiliser la fonctionnalité normale des tuyaux.
( proc1 3>&1 1>&2- 2>&3- ) | proc2
Fourni stdout
y stderr
qui pointent tous deux au même endroit au départ, cela vous donnera ce dont vous avez besoin.
Qu'est-ce que le x>&y
permet de modifier le gestionnaire du fichier x
donc il envoie maintenant ses données à n'importe quel handle de fichier y
actuellement des points. Pour notre cas spécifique :
-
3>&1
crée un nouveau poignée 3
qui donnera lieu à une sortie vers le actuel poignée 1
(stdout original), juste pour le sauvegarder quelque part pour le dernier point ci-dessous.
-
1>&2
modifie la poignée 1
(stdout) pour sortir sur le actuel poignée 2
(stderr original).
-
2>&3-
modifie la poignée 2
(stderr) pour la sortie vers le actuel poignée 3
(stdout original) puis ferme le handle 3
(via le -
à la fin).
C'est effectivement la commande de permutation que l'on voit dans les algorithmes de tri :
temp = value1;
value1 = value2;
value2 = temp;
0 votes
Vous pouvez effectuer une redirection aussi simple dans
rc
qui est une autre coquille. Par exemple :proc1 |[2] proc2
. C'est beau, non ? Pas dansbash
cependant.0 votes
En rapport : Piping à la fois stdout et stderr dans bash ? . Et voici la réponse la plus simple est de canaliser à la fois stdout et stderr.