2 votes

A propos des comportements des redirections avec les redirections named pipe, grep et fichier

J'ai une question sur le comportement de ma commande bash. Je veux grep deux fois le même flux de stdout vers 2 fichiers différents. Pour ce faire, j'ai fait :

./prog | tee >(grep -i 'grep1' > file1) | grep -i 'grep2' > file2

Mais mon fichier 2 est vide. Je pensais que mon grep -i 'grep2' n'a rien attrapé mais si je tape juste :

./prog | tee >(grep -i 'grep1' > file1) | grep -i 'grep2'

J'ai le résultat de mon brevet :

[grep2] mylog...
[grep2] mylog...
[grep2] mylog...

J'arrive à écrire dans mes deux fichiers avec cette commande :

./prog | tee >(grep -i 'grep1' > file1) >(grep -i 'grep2' > file2)

mais je dois ajouter > /dev/null à la fin, pour ne pas avoir de sortie dans stdout.

Ma question est la suivante : pourquoi la redirection après le second grep n'est pas prise en compte par mon file2 et pourquoi dois-je ajouter un autre tuyau nommé pour le faire ?

2voto

Kent Points 71470

Vous y êtes presque. Essayez ceci :

./prog | tee >(grep -i 'grep1' > file1) >(grep -i 'grep2' > file2)

si vous voulez sauter la sortie stdout, faites

./prog | tee >(grep -i 'grep1' > file1) >(grep -i 'grep2' > file2) > /dev/null

par exemple :

kent$  seq 30|tee >(grep 2 >a) >(grep 3 > b) > /dev/null                                                                                                                    

kent$  head a b
==> a <==
2
12
20
21
22
23
24
25
26
27

==> b <==
3
13
23
30

0voto

Turgal Points 517

Après avoir lu la réponse de Kent et utilisé son exemple en utilisant seq J'ai découvert que le problème venait de mon programme. Mon programme se comporte comme un deamon, donc le dernier tube pour la dernière redirection n'a pas été bifurqué comme le premier et n'a donc rien fait jusqu'à la fin du programme.

J'avais donc déjà la bonne solution, en utilisant 2 tuyaux nommés pour les 2 redirections :

./prog | tee >(grep -i 'grep1' > file1) >(grep -i 'grep2' > file2)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X